El plan de ejecución muestra el índice faltante pero la consulta es rápida

8

Mientras observa un plan de ejecución real, muestra índices faltantes a pesar de que la consulta tarda menos de 1 segundo.

SELECT
    Account.AccountID,
    Account.Name
FROM
    account      
    LEFT OUTER JOIN accountfeaturesetting afs 
ON afs.accountid = account.accountid   
and afs.featureid = 'Schedules'
 and  
afs.settingid = 'EditReasons'           
WHERE
    ISNULL(afs.Value, '0') = '0'  
    AND EXISTS 
(SELECT 1 FROM program WHERE program.AccountID = account.AccountID
 AND program.Active = 1 
AND (program.ScheduleEditReasonFlags <> 0 
OR program.ScheduleEditReasonFields <> 0))
    AND account.IsMaster = 0
    AND account.BeginDate IS NOT NULL

El plan de ejecución muestra:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])

¿Necesitamos crear el índice aunque la consulta solo tome 1 segundo? ¿Sobre qué base se debe crear un índice?

Voy a ejecutar esta consulta como un trabajo diario.

somu
fuente
1
¿Es un segundo lo suficientemente rápido?
Erik Darling
Está tomando menos de 1 segundo
somu
44
De acuerdo ... ¿es lo suficientemente rápido?
Erik Darling
Creo que lo que su rápido como tabla de cuentas tiene 900 featuresetting cuenta rows.and tiene 21385 filas
SOMU
1
Yo diría que agregue más filas como 100 veces más de lo que realmente tiene en una base de datos de prueba y publique el plan de ejecución real. luego, publíquelo nuevamente después de agregar este índice y verá y conocerá por qué otros recomendarían o no aplicar este índice.
Magier

Respuestas:

15

No necesita agregar el índice en este momento. Todo el mensaje de "índice faltante" significa que esto podría ser útil. Puede que no sea sinceramente, o puede haber un índice que ayude aún más.

En cuanto a si es necesario agregar el nuevo índice? Bueno, digamos que tiene 100 filas en la tabla de la cuenta, pero todavía no está en uso. En un par de meses, tiene hasta 10,000 filas y la consulta ahora demora media hora o más. En ese punto, podría considerar agregar el índice. Y cuando digo considerar, me refiero a probarlo en un entorno de prueba y ver si realmente mejora las cosas.

Otras consideraciones incluyen:

  • ¿Cuántos índices ya tengo en esta tabla? Si tiene más de 10 índices, estaría más preocupado que si dijera 2.
  • ¿Qué tan importante es esta consulta? Dices que lo estás ejecutando todas las noches. A 1 segundo está bien (suponiendo que solo lo ejecutes una vez). Si, por otro lado, es parte de un proceso y se ejecuta miles de veces cada noche, entonces podría ser un problema mayor. Si llega a un punto en el que está tomando el tiempo suficiente para causarle problemas (causando problemas con otro proceso, o encontrándose con momentos en que los usuarios están en el sistema, etc.), entonces debe observar el rendimiento y agregar índices.
Kenneth Fisher
fuente
También vale la pena preguntar cuántas cuentas espera tener. Si está tomando pedidos de aviones de pasajeros, es posible que no tenga una gran base de clientes, pero si se trata de un sitio de redes sociales, su objetivo principal es lograr que ese número llegue a millones lo más rápido posible. Una cosa más: en algunos casos, me inclinaría por hacer el índice ahora para no tener que buscar lo que hace que la aplicación se ralentice un año después, cuando el número de cuentas despega por alguna razón.
msouth