none
INDICES NONCLUSTERED SOBRE CLUSTERED INDEX RRS feed

  • Pregunta

  • Hola!

    Estoy buscando el mejor desempeño para mis tablas, y tengo una duda en algo

    Si tengo una tabla Prueba (Id, Fecha, Folio , ...)

    Si la tabla Prueba tiene un índice agrupado en el orden:  (Fecha, Id)

    Quiero saber si al crear un índice nonclustered sobre el campo Folio donde incluya los campos del índice agrupado tendría alto desempeño?

    es decir un: CREATE NONCLUSTERED INDEX ON Prueba (Folio) INCLUDE (Fecha, Id);

    Leí que un índice no agrupado sobre una tabla con índice agrupado busca el registro basándose primero en el índice nonclustered QUE APUNTA AL  índice clustered? eso es verdad?

    De tal forma que si pongo en INCLUDE los campos que tiene el índice agrupado ayudaría????

    Saludos 


    saludos


    lunes, 30 de octubre de 2017 21:20

Respuestas

  • Cual es el query al cual quieres medir su desempenio?

    SQL Server incluye la llave del indice clustered en todos los nonclustered o lo que se conoce como RID (archivo, pagina, fila) si la tabla no tiene indice clustered (heap). Si el indice clustered no es unico, entonces SQL Server le adiciona un valor extra (uniquefier) puesto que la llave debe apuntar a un registro unico.

    Recuerda, si el query en cuestion referencia alguna columna no presente en el indice nonclustered entonces habra que ir al clustered (o heap) a buscar sus valores, por lo que la operacion seria doble:

    - Ir al indice nonclustered

    - Ir al indice clustered para traer el resto de columnas

    Si el numero de filas que cumplen el filtro son muchas (haciendo que la doble operacion sea muy cara) entonces el optimizador puede optar de no usar el indice nonclustered e ir directo al clustered (posiblemente escanear).

    No podemos hablar de desempenio de indices sin saber el query que usas.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 31 de octubre de 2017 12:42

Todas las respuestas

  • Tendría el mismo efecto no incluir el clustered puesto que sql los incluye en cualquier caso, eso puede comprobarse de esta forma. 

    Si no hay un índice hace un scan sobre el índice clustered.

    Si existe el índice hace un seek en el índice, a pesar de no haber incluido explícitamente los campos del clustered (porque se incluyen solos)

    Abajo puedes ver como tras crear el índice simplemente usa el índice a pesar de que estoy tomando el id y la fecha


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 31 de octubre de 2017 7:30
    Moderador
  • perfecto, ahora la pregunta es, ¿cual de esas dos opciones tiene mayor desempeño?

    Saludos y gracias por tomarte la molestia de responder


    saludos

    martes, 31 de octubre de 2017 12:28
  • Cual es el query al cual quieres medir su desempenio?

    SQL Server incluye la llave del indice clustered en todos los nonclustered o lo que se conoce como RID (archivo, pagina, fila) si la tabla no tiene indice clustered (heap). Si el indice clustered no es unico, entonces SQL Server le adiciona un valor extra (uniquefier) puesto que la llave debe apuntar a un registro unico.

    Recuerda, si el query en cuestion referencia alguna columna no presente en el indice nonclustered entonces habra que ir al clustered (o heap) a buscar sus valores, por lo que la operacion seria doble:

    - Ir al indice nonclustered

    - Ir al indice clustered para traer el resto de columnas

    Si el numero de filas que cumplen el filtro son muchas (haciendo que la doble operacion sea muy cara) entonces el optimizador puede optar de no usar el indice nonclustered e ir directo al clustered (posiblemente escanear).

    No podemos hablar de desempenio de indices sin saber el query que usas.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 31 de octubre de 2017 12:42
  • Esta perfecto lo que comentas, por lo que me parece bien hacer índices clustered únicos 

    ya con eso todos los nonclustered llevarán la llave del clustered.

    ahora, para hacer los nonclustered, pues ya dependerá de los queries, muchas gracias


    saludos

    martes, 7 de noviembre de 2017 19:04