Nel libro Inside Microsoft SQL Server ™ 2005 T-SQL Interrogazione, l'autore Itzik Ben-Gan ci dicono l'ordine o SQL Server di elaborazione query logica 2005 è:Confuso su Logical ordine Query Processing Itzik Ben-Gan nel suo SQL Server 2005 libro e SQL Server 2008 libro
(8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
1. FROM
2. ON
3. OUTER (join)
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY <---------------------- NOTE
11. TOP <---------------------- NOTE
Nel suo libro Inside Microsoft SQL Server 2008: T-SQL interrogazione, ci ha detto il seguente ordine logico di elaborazione delle query:
(1) FROM
(1-J1) Cartesian Product
(1-J2) ON Filter
(1-J3) Add Outer Rows
(2) WHERE
(3) GROUP BY
(4) HAVING
(5) SELECT
(5-1) Evaluate Expressions
(5-2) DISTINCT
(5-3) TOP <---------------------- NOTE
(6) ORDER BY <---------------------- NOTE
Nota l'ordine di TOP e ORDER BY negli estratti superiori da questi libri. Sono proprio di fronte. Penso che questi due passaggi siano molto importanti e daranno un risultato completamente diverso con un ordine diverso. Voglio sapere se SQL Server 2008 ha modificato qualcosa nel suo motore di archiviazione da SQL Server 2005 o qualcos'altro causa questo?
Grazie.
Si noti che il TOP utilizza l'ordine BY per determinare le righe da conservare. Questo è il modello logico di elaborazione, quindi ottenere i record TOP n basati su ORDER BY _logically_ non risulta in un set di righe con un ordine particolare: la fase logica ORDER BY ordina i risultati. In termini di elaborazione fisica, l'ORDINE BY verrebbe eseguito prima del TOP n. –