Welcome to Sign in | Help
in Search

query-indexes in MSSQL 2005

Last post 05-25-2009, 12:43 PM by ggciubuc. 1 replies.
Sort Posts: Previous Next
  •  05-22-2009, 12:43 PM 7213

    query-indexes in MSSQL 2005

    Salutare,

       In primul rand ma bucur ca exista un forum dedicat celor ce utilizeaza MSSQL-ul.

       Am o nelamurire cu privire la modul in care sunt utilizati indecsii in MSSQL si la modul cum se executa interogarile.

       Mai exact am un query de forma:

     

       select T1.col1, T2.col2 from

        Table1 T1 inner join Table T2 on T1.collegatura=T2.collegatura

                        inner join (select distinct col3 as legatura2 from T2) T3 on T3.legatura2=T1.collegatura2  

     Sper sa fie destul de explicit, interogarea initiala cuprinde un join intre 9 tabele dintre care 2 sunt foarte mari printre care cele 2 in cauza T1, T2.

      Ca o observatie "select distinct" in cele mai multe cazuri returneaza o inregistrare maxim 3 inregistrari.

      Daca rulez "select distinct" separat am un timp de cateva milisecunde, introdus in selectul mare produce o nebunie curata cateva minute de executie(avand in vedere ca imi trebuie mai putin de 10 secunde).

      Inlocuind "select distinct" cu o constanta ajung la un timp de 4 secunde.

     

      Intrebari:

      1.In selectul initial(join-uri) se executa "select distinct" pentru fiecare row.

      2. Daca am un index (care e cam degeba datorita selectivitatii reduse) pe col3 din T2 voi avea in in excution plan un idex scan + agregare, de ce nu merge pe index seek, avand in vedere ca, clauza de where este aceeasi coloana cat si selectul returneaza coloana din index?

     

    Multumesc

  •  05-25-2009, 12:43 PM 7214 in reply to 7213

    Re: query-indexes in MSSQL 2005

    1. Expresia "(select distinct col3 as legatura2 from T2)" se cheama "derived table" si este un fel de tabel temporar care se creeaza odata, si nu de mai multe ori, pt fiecare row
    2. La 2 daca am inteles bine contextul, ar trebui vazut daca exista indecsi pe TOATE coloanele care apar in join, pt ca o regula clara e ca optimizatorul daca nu gasesti indecsi potriviti trece la scan si nu face seek .

    Ar fi bine sa utilizati Database Tuning Advisor , iata un tutorial aici :http://www.exforsys.com/tutorials/sql-server-2005/sql-server-database-tuning-advisor.html


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems