Welcome to Sign in | Help

Re: select distinct...order by?

  •  08-09-2007, 6:16 PM

    Re: select distinct...order by?

    rsocol:

    rsocol:
    [...] deşi uneori ni se pare că ORDER BY-ul cu TOP 100 PERCENT funcţionează în view-uri şi subquery-uri, este de fapt doar o întâmplare.

    Câteva clarificări în legătură cu fraza de mai sus:
    http://blogs.msdn.com/queryoptteam/archive/2006/03/24/560396.aspx

    Răzvan 

    ... 

    create view v as (select top 100 percent * from t1 order by col1 desc)

    ...
    select * from v

    ...

    Este de inteles faptul ca in urma executiei interogarii select * from v se obtine POATE un set de inregistrari neordonate/nesortate. Si asta intr-adevar pentru ca in aceasta interogare lipseste clauza ORDER BY (select * from v order by ...). De asemenea, din analiza planului de executie se observa clar faptul ca M-SGBD (database engine) igonora clauza ORDER BY din definitia vederii select top 100 percent * from t1 order by col1 desc

    in momentul executiei interogarii  select * from v

      |--Table Scan(OBJECT:([tempdb].[dbo].[t1])) 

     

    Dar, daca cream o vedere cu urmatoarea definitie create view v2 as (select col1, col2 from t1 group by col1, col2)

    in urma executiei interogarii select * from v2 rezultatul va fi altul:  inregistrarile sunt ordonate desi lipseste indexul "cluster".

      |--Sort(DISTINCT ORDER BY:([tempdb].[dbo].[t1].[col1] ASC, [tempdb].[dbo].[t1].[col2] ASC))
           |--Table Scan(OBJECT:([tempdb].[dbo].[t1]))

     

    Chiar si in acest ultim caz nu este o garantie (teoretic si practic) asupra faptului ca IN FINAL (select * from v2)  setul de inregistrari va fi ordonat conform criteriilor din definitia vederii v2 ( create view v2 as ( ... group by col1, col2) ).

     

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems