Tengo una tabla enorme, que tiene un número mucho más pequeño (por órdenes de magnitud) de valores distintos en alguna columna x
.¿Puedo optimizar SELECT DISTINCT x FROM hugeTable query creando un índice en la columna x?
Necesito hacer una consulta como SELECT DISTINCT x FROM hugeTable
, y quiero hacerlo relativamente rápido.
Hice algo así como CREATE INDEX hugeTable_by_x ON hugeTable(x)
, pero por alguna razón, aunque la salida es pequeña, la ejecución de la consulta no es tan rápida. El plan de consulta muestra que el 97% del tiempo se usa en la exploración de índice de hugeTable_by_x
, con un número estimado de filas igual al tamaño de toda la tabla. A esto le siguen, entre otras cosas, una operación Hash Match.
Como creé un índice en la columna x
, ¿no puedo esperar que esta consulta se ejecute muy rápido?
Tenga en cuenta que estoy utilizando Microsoft SQL Server 2005.
Hola allí, es la columna que está indexando un campo 'int'? La idea de un idex en una tabla es que el sistema trace dónde se encuentra ese índice en el modelo y luego lo haga más fácil de recuperar. Si este campo no tiene relevancia, aparte de ser solo un valor, realmente no hará mucha diferencia, porque todavía necesita escanear la tabla. –
Si, digamos, hay 1000 filas en 'hugeTable' con' x = 1', entonces 'hugeTable_by_x' todavía debe contener 1000 referencias a esas filas en su nivel de hoja para' x = 1'. Y si esas referencias son amplias (¿cuál es la clave de agrupamiento para 'hugeTable'?), El índice va a ser bastante grande. –
Tenga en cuenta que también probé 'SELECT x FROM hugeTable GROUP BY x', y proporciona exactamente el mismo plan de consulta. – polygenelubricants