la adición de una orden de a esta consulta devuelve más rápido que fuera, ¿por qué?

dba.stackexchange https://dba.stackexchange.com/questions/634

  •  16-10-2019
  •  | 
  •  

Pregunta

¿Alguna idea de por qué la adición de una especie a esta consulta devuelve considerablemente más rápido que sin la orden? Yo esperaría lo contrario así que lo que podría hacer que esto suceda?

SELECT TOP (500) r.cID,r.aField,a.Description 
       FROM dbo.tblR r  
            inner join dbo.tblA a on r.aID = a.ID  
            left join dbo.tblX x on x.cID = r.cID 
       WHERE (ISNULL(x.anotherField,'') <> r.anotherField or x.field3 is null) 
            and (r.ID=(select max(ID) from tblR where cID = r.cID and
            ISNULL(aField,'') <> '')) 
            and r.cID in (select ID from tblC)
       ORDER BY r.cID ASC -- when I comment this line out it runs much slower

Los planes de ejecución no están ayudando mucho.

¿Fue útil?

Solución

La causa más obvia sería que (select max(ID) from tblR where cID = c.cID and ISNULL(aField,'') <> '') sub-consulta en la cláusula WHERE en combinación con el TOP 500 está haciendo el orden a hacer la diferencia.

En cualquier caso, probablemente va a correr ese sub-consulta individual para cada fila de otro modo podría volver hasta que haya encontrado 500 que coincide con toda la WHERE (en realidad, será lo suficientemente brillante como para comprobar las otras partes de la primera DONDE , ya que son mucho menos costosos, pero todavía va a correr la sub-consulta para una parte de las filas que cumple). Haciendo un cálculo, más filas cerca de la parte superior cuando ordenados por partido c.cid actualmente por lo que tiene que ejecutar la sub-consulta con menos frecuencia antes de encontrar 500 partidos que lo hace cuando se ejecuta abajo de los resultados en el orden que escoge el planificador de consulta por defecto.

(estoy asumiendo que los cs deben ser xs o viceversa, de lo contrario la consulta no se presentaría como el c alias no está definido en cualquier lugar)

Es importante que la ejecución de consultas como en el estudio de gestión con el "plan de consulta real" ver encendido -. Entonces es posible ver en el diagrama qué partes están causando el rendimiento differeing

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top