reconstruir mostrar introduccion formulario eliminacion datos creacion consultas con busqueda buscador avanzado actualizacion mysql database indexing

introduccion - mostrar indices mysql



¿Alguna base de datos admite la creación automática de índices? (11)

¿Por qué las bases de datos no indexan automáticamente las tablas en función de la frecuencia de las consultas? ¿Existen herramientas para analizar una base de datos y las consultas que está recibiendo, y crear automáticamente, o al menos sugerir qué índices crear?

Estoy interesado específicamente en MySQL, pero me gustaría tener curiosidad por otras bases de datos también.


Esa es la mejor pregunta que he visto en . Lamentablemente no tengo una respuesta. La tabla grande de Google indexa automáticamente las columnas correctas, pero BigTable no permite combinaciones arbitrarias, por lo que el espacio problemático es mucho más pequeño.

La única respuesta que puedo dar es esta:

Un día, alguien preguntó: "¿Por qué la computadora no puede analizar mi código y compilar y escribir estáticamente las piezas de código que se ejecutan con mayor frecuencia?"

Actualmente, la gente está resolviendo este problema (p. Ej., Tamarin en FF3.1), y creo que las bases de datos relacionales "autoindexables" tienen la misma clase de problema, pero no es una prioridad. Dentro de una década, agregar índices manualmente a una base de datos se considerará una pérdida de tiempo. Por ahora, estamos atascados con la supervisión de consultas lentas y la ejecución de optimizadores.


Estoy de acuerdo con lo que dice Adam Davis en su comentario. Añadiré que si existiera ese mecanismo para crear índices automáticamente, la reacción más común a esta característica sería: "Eso está bien ... ¿Cómo lo apago?"


Existen optimizadores de bases de datos que se pueden habilitar o adjuntar a las bases de datos para sugerir (y en algunos casos realizar) índices que pueden ayudar.

Sin embargo, en realidad no es un problema trivial, y cuando aparecieron por primera vez estas ayudas, a veces los usuarios descubrieron que realmente ralentizaban sus bases de datos debido a optimizaciones inferiores.

Por último, hay MUCHA cantidad de dinero en la industria para arquitectos de bases de datos, y prefieren el status quo.

Aún así, las bases de datos se están volviendo más inteligentes. Si usa el perfilador de SQL Server con el servidor Microsoft SQL, encontrará formas de acelerar su servidor. Otras bases de datos tienen perfiladores similares, y hay utilidades de terceros para hacer este trabajo.

Pero si usted es quien escribe las consultas, ojalá sepa lo suficiente sobre lo que está haciendo para indexar los campos correctos. Si no, tener los índices adecuados es probablemente el menor de tus problemas ...

-Adán


Hay herramientas para esto.

Para MS SQL, utilice el Analizador de SQL (para registrar actividad en la base de datos) y el Asistente de ajuste de Motor de base de datos (SQL 2005) o el Asistente de ajuste de índice (SQL 2000) para analizar las actividades y recomendar índices u otras mejoras.



MS SQL 2005 también mantiene una referencia interna de los índices sugeridos para crear en función de los datos de uso. No es tan completo o preciso como el Tuning Advisor, pero es automático. Investigue dm_db_missing_index_groups para más información.


Parece que MySQL no tiene un generador de perfiles fácil de usar. Tal vez quieras probar algo como this , una clase php basada en MySQL Profiler.


Parte de la razón puede ser que los índices no solo dan una pequeña aceleración. Si no tiene un índice adecuado en una tabla grande, las consultas pueden ejecutarse tan lentamente que la aplicación no se puede utilizar por completo y, posiblemente, si está interactuando con otro software, simplemente no funcionará. Entonces realmente necesita que los índices estén correctos antes de comenzar a tratar de usar la aplicación.

Además, en lugar de crear un índice en segundo plano y desacelerar aún más las cosas mientras se está creando, es mejor tener el índice definido antes de comenzar a agregar cantidades significativas de datos.

Estoy seguro de que obtendremos más herramientas que toman consultas de muestra y resuelven qué índices son necesarios; también probablemente obtengamos bases de datos que hagan lo que usted sugiera y monitoree el desempeño y agregue los índices que crean que son necesarios, pero no creo que sean un reemplazo para comenzar con los índices correctos.


Sí, algunos motores admiten la indexación automática. Un ejemplo de este tipo para mysql es Infobright, su motor no admite índices "convencionales" e indexa implícitamente todo: se trata de un motor de almacenamiento basado en columnas.

El comportamiento de tales motores tiende a ser muy diferente de lo que los desarrolladores (y sí, usted necesita ser un DESARROLLADOR incluso para pensar en usar Infobright, no es un reemplazo de complemento para un motor estándar).


SimpleDB de Amazon tiene indexación automática en todas las columnas en función de su uso:

http://aws.amazon.com/simpledb/

Sin embargo, tiene otras limitaciones:

  • Es una tienda clave-valor, no un RDB. Obviamente, eso significa uniones lentas (y ninguna compatibilidad de unión incorporada).
  • Tiene un límite de 10 gb en el tamaño de la mesa. Hay bibliotecas que manejarán particionar grandes datos para usted, aunque esto lo encierra en la forma de hacer de esa biblioteca, que puede tener sus propios problemas.
  • Almacena todos los valores como cadenas, números pares, lo que hace que ordenar una columna con un 1,9 y 10 salgan como 1,10,9 a menos que use una biblioteca que piratea este por 0. Esto también afecta los números negativos.

El límite de 10gb es más grande de lo que muchos podrían suponer, por lo que puede continuar con esto para un sitio simple que planea reescribir si alguna vez llega a ser grande.

Es desafortunado que este tipo de indexación automática no haya llegado a DynamoDb, que parece haberlo reemplazado, ya que ni siquiera mencionan a SimpleDb en su lista de productos, tiene que encontrarlo a través de enlaces antiguos.