“SQL Optimizer…” DISTINCT yerine EXISTS kullanımı

Posted by Zafer | Posted in SQL | Posted on 22-09-2008

Önerilmez

  1. SELECT DISTINCT product_id, name FROM   products pr, purchase pu
  2. WHERE  pr.product_id = pu.product_id

Önerilir

  1. SELECT product_id, name FROM   products pr
  2. WHERE EXISTS ( SELECT 1 FROM  purchase pr WHERE pr.product_id = pu.product_id)

Sorguda gelen kayıtlarda tekrarlı olanları görüntülememek için DISTINCT kullanılır. EXISTS ise bir alt
sorguda gelen kayıtlar içinde istenilenlerin olup olmadığını kontrol eder. DISTINCT, gelen sonuçlarda
tekrarlı olanları belirlemeden önce sıralama yaptığıdan verimsizdir ve bu yüzden de EXISTS tercih
edilmelidir.
Kaynak : SQL Tuning El Kitabı call 7/24

“SQL Optimizer…” IN yerine EXISTS kullanımı

Posted by Zafer | Posted in SQL | Posted on 22-09-2008

Önerilmez

  1. SELECT product_id, name FROM   products
  2. WHERE  product_id IN ( SELECT product_id FROM   purchases )

Önerilir

  1. SELECT product_id, name FROM   products pr
  2. WHERE EXISTS ( SELECT 1 FROM   purchases pu WHERE   pu.product_id = pr.product_id )

IN bir listede aranan verinin olup olmadığını kontrol eder. EXISTS sadece kayıtların varlığını kontrol
ederken, IN ise gerçek verileri kontrol eder. Alt sorgularda EXISTS daha iyi sonuçlar verdiğinden tercih
edilmelidir.

Kaynak : SQL Tuning El Kitabı call 7/24