Mysql Performanslı Sayfalama Yapmak

PHP ve MySQL ile veritabanı işlemlerine girdiğinizde bu tarz bir uygulama ile karşılaşacaksınız. Nerede derseniz de, en çok verileri sayfalama işlemlerinde elbet. Bu noktada, performans açısından öğrenmeniz gereken bir sorgu var. Çok işinize yarayacak. Buyurun bakalım icon smile MySQL sorgusunda LIMIT kullanırken toplam satır sayısını bulmak
Normalde, MySQL sorgusundaki toplam satır sayısı nasıl bulunur?

Normal seviyedeki kullanıcılar bu işlemi alttaki sorgular ile gerçekleştirecektir.

SELECT COUNT(*) FROM sehir WHERE sehir_ad LIKE 'a%';
SELECT sehir_ad, tel_kod FROM sehir WHERE sehir_ad LIKE 'a%' LIMIT 0,2;

Buradaki ilk sorgu ile koşulumuza uyan tüm şehir isimlerini bulduk. Hani sayfalama bölümü yapacağız ve bu sorguya uyan toplam veri adeti lazım, işte burada bulduk onu.

Sıra geldi listelemeye. Ancak hepsini değil, sadece ikişer ikişer listelemek istiyoruz. O nedenle ilk 2 veriyi aldık.

Genelde yukarıdaki mantıkla bu işlem yürütülür. Ancak ilk satırda toplam veri adetini bulmak için yaptığımız sorgu, sistemi yoracaktır. O nedenle alttaki yöntem performans açısından en güzeli icon wink MySQL sorgusunda LIMIT kullanırken toplam satır sayısını bulmak
Daha performanslı bir sorgu

Üstteki sorgumu alttaki gibi değiştiriyorum.

SELECT SQL_CALC_FOUND_ROWS sehir_ad, tel_kod FROM sehir WHERE sehir_ad LIKE 'a%' LIMIT 0,2;
SELECT FOUND_ROWS();

Bu kez ilk satırın başına SQL_CALC_FOUND_ROWS ekledim ve sorgu koşuluma uyan 2 satırı çektim. İkinci satırda ise özel bir sorgu yaptım. MySQL 4 sürümü ile birlikte gelen FOUND_ROWS kullandım. İlk sorgumuz yapılıyor ve sadece 2 adet veri çekiliyor. Ancak başına eklediğim SQL_CALC_FOUND_ROWS terimi sayesinde, bu koşula uyan toplam veri sayısı da hafızaya alınıyor. Hemen ardından yaptığım (ki bu önemli, önceki sorgudan hemen sonra yapılması gerekiyor) FOUND_ROWS sorgusu ile de hafızadaki toplam veri değerini aldım.

kaynak http://www.dmry.net/mysql-sorgusunda-limit-kullanirken-toplam-satir-sayisini-bulmak/

“Mysql Performanslı Sayfalama Yapmak” üzerine 4 düşünce

  1. SQL_CALC_FOUND_ROWS fonksiyonunu kullanmamanı öneririm özellikle 100.000 row ve üzeri veri içeren tablolarda , group by ve çok ilişkili sorgularda gayet büyük bir yavaşlama söz konusu oluyor (büyük bir internet sitesinin bir servisinde bizzat bu problemle karşılaştım ve sistemciler ile birlikte SQL_CALC_FOUND_ROWS fonksiyonunu kaldırmamızla sistemin rahatlaması bir oldu).

  2. benim tercihim genelde count(), SQL_CALC_FOUND_ROWS ile sayfalama yapmaya çalıştığımız zaman, toplam kaydı almak aynı zamanda limitini uygulatmak zor en temizi count(), tavsiyen için tşk,

  3. Merhaba arkadaşlar şuanda kullandığım mysql db 7,785,389 satır bulunan bir tablo içermektedir.SQL_CALC_FOUND_ROWS ve FOUND_ROWS kullanarak %50 daha hızlı sonuç alıyorum.

  4. Merhaba, SQL_CALC_FOUND_ROWS ve FOUND_ROWS kullanarak %50 daha fazla sonuç alabilirsin, ama,

    çoklu tablolarda, örn countu yaptıgın işlemde birden fazla tablo vb varsa performansın düştüğünü yaptımız testler sonucunda gördüm, ondan dolayı count kullanmaya devam ediyorum şimdilik benim ön gördüğüm stabil bu oldugunu düşünüyorum not(TESTLERİMİ 20M KAYIT İÇEREN VE İÇERİSİNDE TEXT UZUN METİN BULUNAN, DB BOYUTU 3GB GECEN BİR VERİTABANINDA YAPTIM)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>