2012-07-27 14 views
10

En mi programa tengo muy pocas inserciones, y las que se ejecutan con frecuencia no se necesitan al instante y, por lo tanto, se han cambiado a INSERT DELAYED. ¿Debo revisar mi código y ver a qué campos se hace referencia en la cláusula WHERE y agregar un índice para cada uno de ellos? Si es así, ¿qué tipo de índice uso? ¿Son solo insertos que se ralentizan?¿Debo agregar un índice para todos los campos en la cláusula WHERE? - MySQL

¿También puedo utilizar estos índices en cualquier tipo de datos?

Respuesta

13

Hay dos lugares principales en los que podemos considerar la indexación: las columnas a las que se hace referencia en la cláusula WHERE y las columnas utilizadas en las cláusulas JOIN. En resumen, tales columnas deben estar indexadas con respecto a las cuales debe buscar registros particulares.

  • Solo indexe las columnas que se requieren en WHERE y ORDEN POR cláusulas. Las columnas de indexación en abundancia darán lugar a algunas desventajas de .
  • Utilice el atributo NOT NULL para las columnas en las que considera la indexación, de modo que los valores NULL nunca se almacenarán.
  • Utilice la opción --log-long-format para registrar las consultas que no utilizan los índices . De esta forma, puede examinar este archivo de registro y ajustar sus consultas en consecuencia. También registro de consulta lenta.
  • La instrucción EXPLAIN le ayuda a revelar cómo MySQL ejecutará una consulta. Muestra cómo y en qué orden se unen las tablas. Esto puede ser muy útil para determinar cómo escribir consultas optimizadas, y si las columnas son necesarias para indexar.

Esto blog es bueno.

1

No cambie las consultas antes de que vea un problema de rendimiento, es decir, una optimización prematura. En su lugar, utilice el registro de consultas de MySQL para ver qué consultas llevan mucho tiempo y concéntrese en mejorar esas consultas.

+0

Todavía estoy en el proceso de desarrollo de mi sitio web, por lo que parece una mejor idea lanzarlo lo más optimizado posible en lugar de tener que volver y solucionarlo más tarde. –

+1

Lo desalentaría de una optimización prematura incluso en esta fase. Pon a prueba el rendimiento de tu sitio usándolo tú mismo o haciendo que tus amigos lo usen. Luego, vea qué consultas son lentas en el registro de consultas. Si puede, inicie temprano, en lugar de hacer este tipo de optimización. –

+4

Agregar índices a los campos utilizados en las cláusulas WHERE no es una optimización prematura. Es el diseño de la base de datos 101. SIEMPRE debe ser una consideración cuando se determina la estructura de la tabla. –

1

Siempre debe agregar un índice en cualquier campo para usar en una cláusula WHERE (ya sea para SELECT, UPDATE o DELETE). El tipo de índice depende del tipo de datos en el campo y si necesita que cada fila tenga un valor único. Generalmente, el tipo de índice predeterminado (Hash vs. Btree) es mejor dejarlo en la configuración predeterminada a menos que realmente sepa lo que está haciendo.

Ahora bien, si utiliza índices individuales (uno por campo) o índices compuestos depende de cómo funciona la aplicación y es un tema más avanzado, por lo que en general si acaba de comenzar solo use e indexe para cada campo. Tenga en cuenta que sus claves principales tienen índices automáticamente, por lo que no es necesario crear otro índice sobre ellas.

Cuestiones relacionadas