2011-02-06 11 views

Respuesta

3

Probablemente sí, a menos que

  • La mesa tiene muy pocas filas (< 1000)
  • La columna int tiene poca selectividad
  • se está volviendo una gran proporción de la tabla (por ejemplo> 1%)

En cuyo caso, un escaneo de tabla puede tener más sentido de todos modos, y el optimizador puede optar por hacer uno. En la mayoría de los casos tener un índice no es muy dañino, pero definitivamente debes probarlo y verlo (en tu laboratorio, en un hardware de producción con un conjunto de datos similar a la producción)

2

Sí lo hace. No importa qué tipo de datos tenga una columna. Si no especifica un índice, mysql tiene que escanear toda la tabla en cualquier momento que esté buscando un valor con esa columna.

+0

Quizás no en boolean hasta donde yo estoy informado. P.ej. Ver esto: http://stackoverflow.com/questions/10524651/is-there-any-performance-gain-in-indexing-a-boolean-field – dennis

4

Sí, un índice en cualquier columna puede hacer que la consulta rinda más rápido independientemente del tipo de datos. Los datos en sí son lo que importa; no tiene sentido usar un índice si solo hay dos valores actualmente en el sistema.

También tenga en cuenta que:

  • la presencia de un índice no asegura que se utilizará - estadísticas de la tabla deben estar al día, pero realmente depende de la consulta.
  • MySQL también solo permite un índice por SELECCIONAR y tiene una cantidad limitada de espacio para los índices (limit dependent on engine).
+0

+1: Información extra :) – shamittomar

+0

"MySQL también solo permite un índice por SELECT, y tiene una cantidad limitada de espacio para los índices "- ¡¿NO ?! (O simplemente te estoy malinterpretando. ¿Quieres citar algún documento que indique esto tal vez?) – yankee

+0

@yankee: Cuando ves el plan EXPLAIN, MySQL solo puede usar un índice por afirmación que ve EXPLAIN. Una subconsulta sería un SELECT por separado, por ejemplo. –

0

Sí, el punto de los índices es que los crea por primary key o al agregar el índice a mano. El tipo de la columna no dice nada sobre la velocidad de la consulta.

0

Sí, tiene que estar indexado. No tiene sentido indexar columnas tinyint si se usan como booleanas, porque este índice no será lo suficientemente selectivo.

Cuestiones relacionadas