Pregunta

Actualmente tenemos una tabla que usamos para rastrear inivitaciones. Tenemos un campo de correo electrónico que está indexado, pero también tenemos tres claves opcionales que el usuario puede especificar al agregar nuevos correos electrónicos de registro. No permitimos duplicados, por lo que debemos consultar si el correo electrónico más las claves opcionales ya existen. Actualmente, las claves solo se agregan a la instrucción select si se especifican. El caso normal es que solo se especifica el correo electrónico y el uso del índice funciona bastante rápido. Cuando se agregan las teclas, el rendimiento disminuye.

¿Agregar tres índices afectaría el rendimiento de otras operaciones? Las claves probablemente se usan con poca frecuencia para que no queramos afectar el rendimiento en este caso.

  • correo electrónico, clave1
  • correo electrónico, clave1, clave2
  • correo electrónico, clave1, clave2, clave3

La otra idea es que agreguemos 1 clave.

  • correo electrónico, clave1, clave2, clave3

Luego siempre use las 3 claves en la búsqueda (por ejemplo, key1 = mykey AND key2 es NULL Y key3 es NULL)

Vea también

Publicación exacta duplicada

¿Fue útil?

Solución

Personalmente recomendaría este enfoque.

Pruebe el método con el índice único que cubre todo, si recuerdo correctamente, seguirá funcionando bien si solo consulta en la primera de las columnas incluidas. Una vez que tenga el índice en su lugar, ejecute el Asesor de índice.

Luego prueba la otra ruta y repite.

Realmente depende de tus datos.

Por lo general, he podido sobrevivir con 1 índice de cobertura, comenzando con la clave más utilizada primero.

Otros consejos

Depende de la frecuencia con la que se actualice la tabla y de la complejidad de los índices. Si se vuelve loco creando índices, cada vez que se inserta / actualiza / elimina un registro, cada índice tendrá que modificarse para reflejar esa información.

Si solo pone tres índices y son relativamente simples, entonces no debería tener un problema.

Podría estar equivocado, pero creo que si agrega:

  • correo electrónico, clave1, clave2, clave3

como índice, que la mayoría de las bases de datos lo usarán si su consulta está usando " email " ;, " email / key1 " ;, " email / key1 / key2 " ;, etc ... sin requerir que especifique valores nulos para los campos faltantes.

Como han dicho otros, la mayoría de las bases de datos usarán el índice " a, b, c " cuando busque solo a, a y b o a, by c. Y a menudo solo usarán un índice por tabla. Por lo tanto, agregar " correo electrónico, clave1, clave2, clave3 " Probablemente sea el mejor.

Dicho esto, usa EXPLAIN para descubrir qué está pasando realmente. Verifique para asegurarse de qué índices, si corresponde, están utilizando sus consultas. Cada base de datos tiene sus peculiaridades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top