Kayıtları DB varsa denetleme: tek adımda veya iki adımda?

3 Cevap php

Eğer büyük bir veri miktarını döndürür ve birden katılır gerektiren veritabanından bir kayıt almak istediğinizi varsayalım.

Yani benim soru olurdu, veri olup olmadığını kontrol edin ve varsa sonuç almak için tek bir sorgu kullanmak daha iyidir? Veya veriler daha sonra id kaydı var olup olmadığını kontrol etmek için daha basit bir sorgu yapmak, sorgu bir kez daha var olduğunu bilerek sonucu elde etmek.

Örnek:

3 tablolar a, b ve ab (kavşak tablo)

select * from 
from a, b, ab 
where condition
and condition 
and condition 
and condition etc...

veya

select id 
from a, b ab 
where condition

Daha sonra, yukarıda sorgusu yapmak var.

So I don't know if there is any reason to do the second. Any ideas how this affects DB performance veyadoes it matter at all?

3 Cevap

Transferi de zaman alıcıdır - Genellikle bir sorguda en yavaş parçası sonra onu transfer edilecek verilerin bir sürü varsa, vb katılır, dizin arama var, filtre. Eğer veri ayıklamak sonra varlığını kontrol eğer iki kat daha yavaş olacaktır. Sadece veri ayıklamak. Orada ise bunu almak ve eğer - hiçbir şey olsun.

Birden fazla tablodan çıkartırken, JOIN daha hızlı ve daha esnektir.

Sonuçlar paginated veya önbelleğe alınmış olması gerekir ne zaman genellikle "iki sorgular" yaklaşımı tercih ederler. Örneğin:

$found_ids = "select id from products where ...complex $condition...."

maybe add to cache ($condition => $found_ids)

$ids_to_show = array_slice($found_ids, $_GET['page'], $pagesize);

$data = "select * from products, more tables ... where products.id IN($ids_to_show)";

İlk sorgu kimlikleri bir potansiyel olarak uzun bir liste dönebilirsiniz yana, hepsi için veri almak için oldukça zaman kaybı olacaktır.

Eğer çalışma zamanı ile ilgili ise kabul edilmesi gereken bir diğer not. Select deyimi de '*' kullanmaktan kaçının. Bu basit bir not olabilir ama doğrudan sorgu süresini etkiler. Select deyimi, kullanımı takma, endeks u'r tuşları güncelleyin ve sadece gerekli alanları seçin.