Prefiero codificar en t-sql usando lo que en realidad es una unión en línea, en lugar de tener una lista larga de las uniones al final del procedimiento o vista almacenada.¿Cuál de las dos formas de codificar una unión interna es más rápida?
Por ejemplo, el código I:
SELECT PKey , Billable,
(SELECT LastName FROM Contact.dbo.Contacts WHERE (Pkey = Contacts_PKey)),
(SELECT Description FROM Common.dbo.LMain WHERE (PKey= DType)),
(SELECT TaskName FROM Common.dbo.LTask WHERE (PKey = TaskType)) ,
StartTime, EndTime, SavedTime
FROM dbo.TopicLog where StartTime > '7/9/09' ORDER BY StartTime
En lugar de
SELECT t.PKey, t.Billable, c.LastName, m.Description, lt.TaskName, t.StartTime, t.EndTime, t.SavedTime
FROM dbo.TopicLog AS t
inner join Contact.dbo.Contacts as c on c.Pkey = t.Contacts_PKey and t.StartTime > '7/9/09'
inner join Common.dbo.LMain as m on m.PKey = t.DType
inner join Common.dbo.LTask as lt on lt.PKey = t.TaskType
ORDER BY t.StartTime
prefiero este tipo de sintaxis, ya que es mucho menos confuso al escribir o depuración, especialmente cuando hay muchas mesas siendo unidas u otras cosas pasando (declaraciones de casos, funciones t-sql, autocombinaciones, etc.)
Pero mi pregunta es: estoy teniendo un golpe de rendimiento al consultar el databa se de esta manera.
No tengo suficientes datos recopilados para poder medir la diferencia, pero lo haré en algún momento.
Me gustaría averiguarlo antes de continuar. No me gustaría tener que volver más tarde y recodificar todo para mejorar el rendimiento.
+1. Como usted señala, es mucho más probable que las ganancias que se obtienen de una indexación cuidadosa produzcan ganancias significativas. (¡Pero verificar el plan de ejecución les hará saber con certeza!) – Beska
+1 "¡Compruebe los planes de ejecución de consultas por usted mismo!" Esa es la única forma de estar seguro. El optimizador * podría * convertirlos en JOINs automáticamente. Aunque, las dos consultas no son exactamente lo mismo. # 1 es un LEFT JOIN, # 2 es un INNER JOIN. Entonces te darán diferentes planes de todos modos. – beach
Esto es bastante engañoso: es un concepto erróneo común que las subconsultas son más lentas por la razón que usted ha dado, donde de hecho el servidor SQL reescribe las subconsultas como uniones cuando sea posible de todos modos durante la recompilación. – Justin