MYSQL ve LIMIT deyimi

5 Cevap php

Bir sorguya LİMİTİ 1 ekleyerek işlenmesini hızlandırmak olacağını merak ediyordum?

Örneğin ...

Ben bir sorgu var bu olacak zaman geri dönüş 1 sonuç, ama en occasionaly 10 bulunuyor, 100 ya da kayıtlarını bile 1000 dönecektir. Ama ben sadece hiç ilk kaydını isteyecektir.

Limit 1 hız şeyler ya da hiç fark yapmak istiyorsunuz?

Ben 1 sonuç dönmek için GROUP BY kullanabilirsiniz biliyorum ama bu sadece daha fazla hesaplama eklersiniz.

Herhangi bir düşünce memnuniyetle kabul!

Teşekkürler

5 Cevap

Eğer ORDER BY varsa bağlıdır. Bir ORDER BY zaten ayarlanmış tüm sonuç ihtiyacı, bu yüzden sipariş edilebilir.

BY herhangi ORDER yoksa daha hızlı koşmak gerekmektedir.

Her durumda tüm sonuç kümesi elbette gönderilecektir gerekmez beri en azından biraz daha hızlı çalışacaktır.

Yep! o olacak!

Ama emin olmak için, sadece neden bir denemek ve görmek değil sql deyimi sonuna 'Sınırı 1' eklemek için bir saniye sürer

Tüm sorguda kendisine bağlıdır. Eğer bir dizinlenmiş arama (Nerede IndexedColumn = somevalue) veya, daha sonra limit 1 (yan tümcesi ile) bir dizinlenmiş sütun üzerinde bir çeşit yapıyorsanız gerçekten hızlandırır. Eğer katılır veya birden fazla varsa / sipariş hükümler, sonra işler gerçekten hızlı bir şekilde karmaşık olsun nerede. Ama önemli şey NEVER bir sorgu yavaşlatacak "LIMIT 1" kullanarak, götürmek. Bazen o kadar hızlı olacaktır, ama onu yavaşlatmak asla.

PHP ile uğraşırken, şimdi başka bir sorunu vardır. Varsayılan olarak, PHP (tüm kayıtlar indirildikten sonra mysql_query veya mysqli-> sorgu yalnızca dönecektir) sorgudan dönmeden önce tüm sonuç kümesini tampon olacaktır. Sorgu süresi limiti 1 ile biraz değişmiş olabilir Yani iken, PHP sonucu tampon kullandığı zaman ve bellek anlamlıdır. Her satır veri 200 bayt var düşünün. Şimdi, sorgu 10.000 satır döndürür. Yani PHP (aslında yakın 10MB PHP'nin değişken yapısı yükü ile) kullanmak asla ek bellek 2mb tahsis etmek anlamına gelir. Bellek ayrılırken çok pahalı olabilir, bu yüzden genel kural sadece hiç ne gerek tahsis (ya da ihtiyacınız olacağını düşünüyorum) edilmektedir. Eğer sadece 1 istediğiniz zaman 10.000 satırları indirmeden sadece savurgan olduğunu.

Bu iki etkiyi birleştirin ve sadece 1 satır istiyorsanız, HER ZAMAN "LIMIT 1" kullanmalısınız neden görebilirsiniz.

Here is some relevant documentation MySQL sitesinden konuyla ilgili.

Bu sorgunun diğer parçaları bağlı olarak farklı şekillerde şeyleri hızlandırmak gibi görünüyor. Hiçbir ORDER veya GROUP veya HAVING hükümler varsa bir kenara derhal durdurmak yerine geri her vermek edememek, yardımcı olur, ben emin değilim sonuç satır (geri 100.000 kayıtları alıyorsanız eğer hızlandırmak yeterince büyük olabilir).

Bu aslında LIMIT fıkra temel amacı budur: P istediğiniz kaç sonuç biliyorsanız, daha hızlı olduğu için (eğer bir ORDER BY yapıyorsun sürece) HER ZAMAN LİMİTİ olarak değil sadece bu numarayı belirtmeniz gerekir, ancak daha fazla olması PHP komut bellek ile verimli.

Not: Seni etiketleri PHP eklendi beri PHP ile MySQL kullanarak varsayarak yaşıyorum. Ayrıca kullanırken sadece SINIRI kullanarak avantaj (bir betik dili dışında) doğrudan MySQL seçerek ediyorsanız ORDER BY yönetmek için sonuçlar kolaylaştırmak için saf olduğunu.