Welcome to Sign in | Help

Re: Estimated number of rows

  •  01-13-2008, 7:45 PM

    Re: Estimated number of rows

    liviu.costea:

    Am o tabela (tabela_mea) cu peste 2 mil inregistrari si care are un index clustered (pe o coloana identity). Mai are un index pe o coloana (coloana_x), iar densitatea e de 0,79. Am doua cazuri:

    Cazul 1:

    SELECT * FROM tabela_mea WHERE coloana_x = 1

    In cazul asta la index seek imi da estimated number of rows 1,2 ceea ce consider eu ca e ok.

    Cazul 2:

    DECLARE @val_x int

    SET @val_x = 1

    SELECT * FROM tabela_mea WHERE coloana_x = @val_x

    Aici la index seek imi da 10,75 estimated rows.

    Acum stiu ca al doilea caz e un singur batch si nu poate sa vada valoarea parametrului si imi da o valoare generala. Dar totusi de unde valoarea asta de 10,75. Eu credeam ca se uita la selectvitatea indexului (care e 1,2).

    Is deschis la orice varianta / explicatie. Smile

    Multumesc.


    Ca fapt divers, dacă doreşti ca SQL Server să utilizeze în al doilea caz acelaşi plan de execuţie pentru interogarea SELECT ... WHERE coloana_x ... ca şi cel din primul caz (este foarte probabil ca planurile de execuţie în cele două cazuri să fie diferite) o soluţie simplă presupune utilizarea - începând din SQL Server 2005 - a clauzei OPTION OPTIMIZE FOR astfel:
    1
    2
    3
    4

    SELECT * 
    FROM tabela_mea
    WHERE coloana_x = @val_x
    OPTION (OPTIMIZE FOR(@val_x = 1))
    Deşi variabila @val_x poate lua diverse valori, planul de execuţie utilizat va fi cel optimizat pentru @val_x = 1.

    BOL URL: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/66fb1520-dcdf-4aab-9ff1-7de8f79e5b2d.htm
    BOL URL: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/bfc97632-c14c-4768-9dc5-a9c512f6b2bd.htm

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