sql >> Base de Datos >  >> RDS >> Mysql

indexar un campo de bits en MYSQL

En términos generales, no. Un campo de dos estados no acelera las consultas cuando se indexa porque tiene que mirar la mitad de las filas en promedio. Desea que sus entradas de índice sean selectivas:una entrada dada en el índice debe representar solo un pequeño porcentaje de los valores posibles (digamos, menos del 10%, preferiblemente en fracciones de un porcentaje). Luego, usar el índice ignora la mayoría de los datos en la tabla, que es lo que le brinda un beneficio de rendimiento.

Algunos DBMS admiten índices de mapas de bits. Pueden ayudar, pero aún te encuentras con el problema de la selectividad.

La pregunta actualizada dice que la cantidad de valores con el valor 1 será pequeña (menos del uno por ciento); ¿Un índice le dará un beneficio ahora?

La respuesta es:

  • Para aquellas consultas en las que especifica que el valor es 1, entonces sí, un índice en la columna podría proporcionar un beneficio, siempre que el optimizador realmente haga uso del índice. Es posible que deba modificar el DBMS para que se dé cuenta de que el índice está sesgado a favor de usarlo con consultas donde el valor es 1; esto tiende a ser específico de DBMS, pero la actualización de estadísticas en varias formas es el nombre del juego, posiblemente usando sugerencias en las consultas SQL también. Por supuesto, si el optimizador nunca usa el índice, entonces aún no proporciona ningún beneficio, y el optimizador puede decidir que otros índices lo ayuden más de alguna manera.

  • Para aquellas consultas donde el valor sea 0, no se debe utilizar el índice. Sin embargo, lo más probable es que el DBMS continúe manteniendo el índice para los valores 0 también, aunque nunca debería usarlos. Sería un DBMS inusual al que se le podría ordenar 'solo indexar esta columna para los valores distintos de cero', aunque eso sería muy beneficioso.

Entonces, depende. Depende de las consultas y depende del optimizador.

Tenga en cuenta también que un índice compuesto, en algunas otras columnas utilizadas habitualmente y luego el campo de bits, puede proporcionar algún beneficio. Por lo tanto, si casi siempre selecciona un rango de fechas, entonces un índice compuesto en las columnas de campo de fecha y de bits (probablemente en ese orden) debería proporcionarle un buen índice.