Welcome to Sign in | Help

Re: Nelamuriri cu IN

  •  09-17-2008, 1:18 PM

    Re: Nelamuriri cu IN

    Presupun că foloseşti SQL Server 2005. Aşa cum spunea şi Bogdan, SQL Server 2000 nu pune niciun filtru la table scan-ul pe tabela B. În schimb, SQL Server 2005, face o optimizare punând un filtru şi pe tabela B (mai precis "ID_A >=1 AND ID_A <=3").

    În condiţiile date (adică fără niciun index), mi se pare o optimizare inteligentă şi utilă. Sigur, s-ar putea face optimizarea punând acelaşi filtru ca pe tabela A (adică "ID_A=1 OR ID_A=3"), dar probabil că au considerat că ar putea mări excesiv complexitatea planului de execuţie atunci când sunt multe valori în clauza IN, fără să aducă un spor de performanţă semnificativ.

    În orice caz, dacă te preocupă performanţa acestui query, cel mai bun lucru pe care poţi să-l faci este să adaugi PRIMARY KEY-uri şi alţi indecşi (eventual să nu permiţi NULL-uri şi să adaugi şi FOREIGN KEY-uri), creând tabelele astfel:

    CREATE TABLE A (ID_A int PRIMARY KEY, Nume varchar(50) NOT NULL)

    CREATE TABLE B (ID_B int PRIMARY KEY, ID_A int NOT NULL REFERENCES A, Nume varchar(50) NOT NULL)

    CREATE INDEX IX1 ON B (ID_A)
    CREATE INDEX IX2 ON B (ID_A) INCLUDE (Nume)

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