he descubierto que en algunos casos una consulta comoservidor SQL unirse vs pregunta de desempeño subconsulta
select
usertable.userid,
(select top 1 name from nametable where userid = usertable.userid) as name
from usertable
where active = 1
lleva un orden de magnitud más tiempo en completarse en SS2008R2 que el equivalente consulta de combinación
select
usertable.userid,
nametable.name
from usertable
left join nametable on nametable.userid = usertable.userid
where usertable.active = 1
donde ambos las tablas están indexadas y tienen más de 100k filas. Curiosamente, la inserción de una cláusula de la parte superior en la consulta original hace realizar a la par con la consulta de unión:
select
top (select count(*) from usertable where active = 1) usertable.userid,
(select top 1 name from nametable where userid = usertable.userid) as name
from usertable
where active = 1
¿Alguien tiene alguna idea de por qué la consulta original lleva a cabo tan mal?
FYI al diagnosticar problemas de rendimiento que siempre debe tener un plan de ejecución de la consulta. – Justin
Si tiene acceso a Safari Books Online, consulte "Inside Microsoft® SQL Server 2005: Afinación y optimización de consultas - capítulo 3" u Otro buen enlace http://blogs.msdn.com/b/craigfr/archive/2006 /09/27/774107.aspx –