Bir MySQL sorgusuna LIMIT 1 eklediğimde, 1 sonuç bulduktan sonra aramayı durdurur mu (böylece daha hızlı hale getirir) yoksa yine de tüm sonuçları alıp sonunda keser mi?
Bir MySQL sorgusuna LIMIT 1 eklediğimde, 1 sonuç bulduktan sonra aramayı durdurur mu (böylece daha hızlı hale getirir) yoksa yine de tüm sonuçları alıp sonunda keser mi?
Yanıtlar:
Sorguya bağlı olarak, bir sınır cümlesi eklemenin performans üzerinde büyük bir etkisi olabilir. Yalnızca bir satır istiyorsanız (veya yalnızca bir satırın sorguyu tatmin edebileceğini biliyorsanız) ve dahili optimize edicinin onu nasıl çalıştıracağından emin değilseniz (örneğin, WHERE cümlesinin bir dizine çarpmaması vb.), kesinlikle bir LIMIT cümlesi eklemelisiniz.
Optimize edilmiş sorgulara gelince (küçük tablolarda dizinler kullanarak), muhtemelen performans açısından çok da önemli olmayacaktır, ancak yine - eğer sadece bir satırla ilgileniyorsanız, ne olursa olsun bir LIMIT cümlesi eklemektense.
Sınır, sorgunun performansını etkileyebilir (aşağıdaki yorumlara ve bağlantıya bakın) ve ayrıca MySQL tarafından çıkarılan sonuç kümesini azaltır. Tek bir sonuç beklediğiniz bir sorgu için faydalar vardır.
Dahası, sonuç kümesinin sınırlandırılması aslında toplam sorgu süresini hızlandırabilir çünkü büyük sonuç kümelerini aktarmak bellek kullanır ve diskte potansiyel olarak geçici tablolar oluşturur. Son zamanlarda büyük sonuç kümeleri nedeniyle bir sunucuyu öldürme limitini kullanmayan bir uygulama gördüğümde ve sınırın yerinde olması nedeniyle kaynak kullanımı büyük ölçüde düştü.
Daha ayrıntılı bilgi için bu sayfayı kontrol edin: MySQL Belgeleri: LIMIT Optimizasyonu
Geri gelen yalnızca 1 sonuç varsa, o zaman hayır, LIMIT daha hızlı yapmayacaktır. Çok fazla sonuç varsa ve yalnızca ilk sonuca ihtiyacınız varsa ve ifadelere göre GRUP veya SİPARİŞ yoksa, LIMIT daha hızlı hale getirecektir.
Kısaca cevap evet. Sonucunuzu 1 ile sınırlandırırsanız, bir sonuç "bekliyor olsanız" bile, veritabanınız tüm kayıtlarınıza bakmayacağı için sorgu daha hızlı olacaktır. Sorgunuzla eşleşen bir kayıt bulduğunda duracaktır.
UNIQUE
(veyaPRIMARY KEY
) kısıtlama (veya dizin) varsa değil . stackoverflow.com/questions/8467092/…