Los índices de Mysql al igual que en la vida real los índices de los libros nos sirven para encontrar más rápido aquello que buscamos, por lo tanto y extrapolando a bases de datos podemos decir que nos sirven para agilizar las consultas a las tablas.
Ventajas
- Una de las mayores ventajas es que cuando Mysql se encuentra un índice evitamos un "escaneo completo de la tabla" lo que hace que cuando tenemos grandes cantidades de datos en nuestras tablas, la mejora puede ser muy importante.
- Muy relacionado con el anterior... al evitar "escaneos completos de las tablas", evitamos los siguientes problemas: Sobrecarga de CPU, sobrecarga de disco y concurrencia.
- Con los índices evitamos que Mysql tenga que hacer lecturas secuenciales.
- Los índices nos permiten una mayor rápidez en la ejecución de las consultas tipo SELECT lo que sea WHERE ...
- Y por último será una ventaja para aquellos campos que no tengan datos duplicados, sin embargo si es un campo con valores que se repiten continuamente (Ej. Masculino/Femenino) no es aconsejable.
Desventajas
Pero a pesar de sus grandes ventajas no debemos abusar de ellos puesto que en determinadas situaciones no supondrá una mejora:
- Los índices son una desventaja en aquellas tablas las que se utiliza frecuentemente operaciones de escritura (Insert, Delete, Update), esto es porque los índices se actualizan cada vez que se modifica una columna.
- Los índices tambien suponen una desventaja en tablas demasiado pequeñas puesto que no necesitaremos ganar tiempo
en las consultas. - Tampoco son muy aconsejables cuando pretendemos que la tabla sobre la que se aplica devuelva una gran cantidad de datos en cada consulta.
- Por último hay que tener en cuenta que ocupan espacio y en determinadas ocasiones incluso más espacio que los propios datos.
Ahora tenemos un dilema, ¿Usamos índices o no?
Pues como todo depende, si tenemos una consulta en la que tenemos claro el uso que vamos a necesitar de la claúsula WHERE la respuesta es sí, por el contrario si tenemos un gran número de registros duplicados y lo que necesitamos la gran mayoría de veces es una lectura secuencial la respuesta es no
Índices y optimización de consultas
Enlaces Relacionados
Un poco de historia y curiosidades de Google Maps/Earth
20 trucos para mejorar tus búsquedas en Google
Ver presentaciones PowerPoint en Gmail
Google Maps lanza el Drag Zoom Control y Directions
Curiosidades de Google Street View
Google es Internet
Google lanza Street View
Utiliza Google para no aburrirte
El rediseño de la portada de Google requiere Javascript
Google Experimental Search
Alternativas a Google
Google y el contenido duplicado
Trabajo en equipos virtuales (Teletrabajo)
Gmail aparece en la página de inicio de Google
Gmail sin invitaciones
Actualización de Google Webmasters
Presently será el Powerpoint de Google
Enlaces Relacionados
- ¿Porqué MySQL es lento con grandes tablas?
- Claves foráneas en un clúster MySQL
- Muestra gráficas con MySql
- MyISAM vs InnoDB
- XML y PHP 5
- Archivos KMZ/KML
- Top 10 programadores
- Consejos para planificar una aplicación web
- El rediseño de la portada de Google requiere Javascript
- Técnicas de optimización de código





nada,nja
esta bien¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cagao :
porque tiene q tener mas hojas de ventajas
Meec! Error
Soy habitual de tu blog y leo practicamente todos tus post pero hoy no estoy nada de acuerdo con este en concreto. Coincido plenamente con los dos comentarios anteriores. Precisamente ayer vi como un mal disño de una base de datos (sin indices) daba un timeout de mysql al usar "left join". Efectivamente los indices son la base de la integridad referencial y si queremos que nuestro servidor MySQL no se ponga cachondo cada vez que le pedimos un query tenemos que tener un buen diseño (con indices) de nuestra base de datos y una buena relación entre tablas, cosa que poca gente aplica en MySQL y tenemos disponible desde la versión 3.x y vamos por la 5.
Teneis mucha razón de hecho
Teneis mucha razón de hecho uno de los motivos para escribir esta entrada era para ver que pensabais sobre los índices, quizás es cierto que los de desventajas suena un poco fuere podría haber puesto "inconvenientes", bueno nose.... la verdad es que coincido en que son muy necesarios pero tambien queria destacar que si no los conoces y los usas incorrectamente no serán de gran ayuda.
Un abrazo
No señor.
Vamos a ver.
Si bien algunas de las "desventajas" que comentas son ciertas(yo no las llamaría así) , los indices no solo sirven para buscar datos.
Es cierto que ocupan espacio y que se actualizan con los datos pero no son "desventajas", ya que el tiempo que emplean en esas operaciones es ridiculo comparado con las ventajas que aportan. Para minimizar ese tiempo te recomiendo que coloques los indices en otro disco diferente, manejado por otra controladora.
Para consultas que devuelven gran cantidad de datos pueden ser adecuados o no. Es cuestion del arupamiento del índice y de como se accede a los datos. Escribir el SQL bien es el secreto.
Las restricciones únicas y las claves primarias y alternativas son en realidad índices, y estas a su vez son la base de la integridad referencial.
Una base de datos sin integridad referencial no es más que un grupo de ficheros sin ningún tipo de orden. Es decir, el usuario que tiene una "base de datos Excel".
En fin, los indices siempre si, pero sabiendo lo que hacemos. Ni una sola tabla sin clave primaria!
un apunte
Tambien es muy interesante utilizarlos en las consultas inner join para enlazar las paginas. tabla1 inner join tabla2 on campo1=campo2. campo1 y campo2 suele ser recomendable ser indice. Hay que mirarlo bien y no es un sistema de sota caballo rey pero normalmente suele ser asi.
Para ver bien si se necetia un indice o no, lo mejor es controlar con explain(de mysql) cuantas tuplas recorre antes y despues del indice.
Saludos.
Enviar un comentario nuevo