Da, foreign key-urile pot fi folosite de Query Optimizer pentru a genera un plan de execuţie mai bun pentru instrucţiunile de tip SELECT. De exemplu, rulaţi următorul script (în SQL Server 2005), cu opţiunea "Include Actual Execution Plan":
CREATE TABLE T1 (X INT PRIMARY KEY)
CREATE TABLE T2 (Y INT PRIMARY KEY, X INT NOT NULL)
INSERT INTO T1 VALUES (1)
INSERT INTO T1 VALUES (2)
INSERT INTO T1 VALUES (3)
INSERT INTO T2 VALUES (100, 1)
INSERT INTO T2 VALUES (101, 1)
INSERT INTO T2 VALUES (102, 2)
SELECT COUNT(*) FROM T1 INNER JOIN T2 ON T1.X=T2.X
ALTER TABLE T2 ADD FOREIGN KEY (X) REFERENCES T1(X)
SELECT COUNT(*) FROM T1 INNER JOIN T2 ON T1.X=T2.X
DROP TABLE T2,T1
Se observă că pentru al doilea SELECT (deşi acesta este identic cu primul SELECT), query plan-ul este mai simplu (mai eficient). Asta deoarece query optimizer-ul şi-a dat seama că în condiţiile în care există acest constraint, query-ul respectiv devine echivalent cu query-ul "SELECT COUNT(*) FROM T2" şi nu a mai accesat deloc tabela T1.
Răzvan