He creado una secuencia de comandos para encontrar la selectividad de cada columna para todas las tablas. En algunas tablas con menos de 100 filas, la selectividad de una columna es más del 50%. Donde selectividad = valores distintos/Filas de número total. ¿Son esas columnas elegibles para un índice? O bien, ¿puede decirme el requisito mínimo para el número de filas para crear un índice?¿Cuál es el número mínimo de filas requeridas para crear un índice?
Respuesta
Puede indexar en cualquier columna - la pregunta es si tiene algún sentido y si se utiliza ese índice ....
Típicamente, una selectividad de menos de 1-5% podría funcionar - la más pequeña ese porcentaje, mejor. Lo mejor son los valores únicos de una gran población, p. una ID de cliente única de cientos de miles: definitivamente se usarán esos índices.
Las cosas como el género (solo 2 valores) u otras cosas que solo tienen un número muy limitado de valores posibles normalmente no funcionan bien en un índice. Al menos por su cuenta, estas columnas podrían estar bien para ser incluidas en otro índice como una segunda o tercera columna.
Pero en realidad, la única manera de saber si es o no un índice que tiene sentido es
- medida sus consultas antes de
- crear el índice
- ejecutar sus consultas vez más, consulte sus planes de ejecución , mida sus tiempos
No hay una regla de oro sobre cuándo se usará (o se ignorará) un índice: demasiadas variables influyen en esa decisión.
Para algunos consejos de expertos sobre cómo hacer frente a los índices, y la manera de averiguar lo que los índices no podría acostumbrarse, y cuando tiene sentido para crear un índice, ver las entradas del blog de Kimberly Tripp:
no estoy seguro acerca de SQL-servidor, pero la mayoría de los DBMS no utilizan un índice para la recuperación i f puede recuperar todas las filas de la tabla en una sola E/S. Verá esto en las explicaciones de PLAN, algunas tablas siempre se escanean en el espacio de tablas.
En mi humilde opinión, cualquier tabla con menos de 5000 filas no vale la pena analizar la cardinalidad si el DBMS se está ejecutando en un servidor.
La mayoría de los DBMS utilizan un caché para datos y código (procedimiento almacenado, plan de ejecución, etc.). En SQL Server creo que se llama los datos y caché de procedimientos, y en Oracle, se llama la caché de memoria intermedia y la SGA. Los datos y/o el índice de la tabla pueden estar en la memoria caché.
La tabla pequeña a la que se accede con frecuencia probablemente encajará en la caché. Pero la tabla puede desalojarse de la memoria caché, por ejemplo, si una consulta carga datos nuevos del disco. Hay opciones para indicar que desea que una tabla sea permanentemente en el caché (consulte PINTABLE).Esa es quizás una estrategia mejor que utilizar un índice si su tabla es muy pequeña (que es su caso). Agregar un índice (que también estaría siempre en la caché) podría ayudar aún más, pero no sé cuál sería la ganancia.
La gran diferencia en el rendimiento es el acceso al disco frente al acceso a la memoria. El propósito del índice es reducir la cantidad de datos para leer desde el disco, pero si ya está en la memoria, la ganancia es probablemente pequeña.
- 1. Encontrar el número mínimo de operaciones requeridas para calcular un número usando un rango de números especificado
- 2. ¿Cuál es el número mínimo de bits necesarios para corregir todos los errores de 2 bits?
- 3. ¿Cuál es el retraso mínimo detectable por un humano?
- 4. R: crear una matriz con un número desconocido de filas
- 5. crear un índice sin bloquear el DB
- 6. Cómo crear DSL en Scala para líneas de comando con un número mínimo de texto adicional
- 7. MySQL: ¿cuánto tiempo crear un índice?
- 8. ¿Cómo encontrar el índice del elemento con un valor mínimo?
- 9. ¿Cuál es el valor mínimo en milisegundos de setTimeout?
- 10. Mustache.js + jQuery: ¿cuál es el ejemplo mínimo de trabajo?
- 11. mínimo de la SED número
- 12. Número mínimo de operaciones para hacer una matriz ordenada
- 13. postgres crear un índice
- 14. ¿Es una matriz ordenada un min-heap? ¿Cuál es el valor mínimo de un montón máximo?
- 15. ¿Cuál es el lenguaje de programación funcional más mínimo?
- 16. MySQL. Crear un índice para consultas "O"
- 17. ¿Cómo crear rutas de índice para todas las filas y todas las secciones para uitableview?
- 18. Índice de elemento mínimo en un std :: lista
- 19. ¿Cuál es el valor máximo de un número en Lua?
- 20. ¿Cuál es la sintaxis para forzar el uso de un índice para una unión en MySQL?
- 21. Ruby: ¿Cómo encontrar el índice del elemento de matriz mínimo?
- 22. número mínimo de hilos de GPU para ser eficaz
- 23. Proporcione un número entero para un índice de matriz en OpenGL ES 2.0?
- 24. ¿Cuál es el método menos costoso para obtener un recuento de filas para una consulta SQL?
- 25. ¿Crear un índice para la búsqueda de subcadenas?
- 26. Cuál es la diferencia entre 'índice' e 'índice de lista'
- 27. Cómo crear un dummy mínimo X509Certificate2?
- 28. ¿Cuál es el número 11 del glifo?
- 29. vb.net: número de índice en "para cada"
- 30. ¿Es posible hacer un control de cuadrícula pulido de tamaño automático a su altura entre un rango mínimo y máximo para ajustarse al número de filas?
Tengo una tabla con 3 valores de interger y todos son dostinct. La selectividad de eso es más del 95%. Y esta tabla se usa principalmente con solo una declaración. Entonces, ¿es posible crear un índice sobre eso? – Paresh
95% significado selectivo? Típicamente, desea una selectividad muy baja: desea que un solo valor (ID = 55) solo seleccione una cantidad mínima de filas. Si su selectividad en ese escenario (porcentaje de cuántas filas del total se seleccionará para un valor dado de su campo) es inferior al 5% o superior, incluso por debajo del 1%, entonces definitivamente tiene sentido indexar. –
"Cosas como el sexo (solo 2 valores)" ahora que es 2018, esta parte de su respuesta está desactualizada. El género debería ser VARCHAR (255) a partir de ahora. Personalmente me identifico como un helicóptero de ataque apache. –