Selamlar,
Query Optimizer çalışırken istatistikleri kullandığından istatistiklerin yakın zamanda alınmış olması önemlidir. Bir diğer önemli nokta data miktarı olabilir çünkü bazen index kullanımı gerçektende full table scan a göre maliyetli olabilir. Mysql de yeniyim o nedenle tam emin değilim anladığım kadarıyla bu istatistikler otomatik toplanmıyor. Dolayısıyla query yi çalıştırmadan önce Analyze Table komutuyla toplamakta fayda var. Ayrıca Analyze Table komutuyla elde edilen istatistiklerin kalıcı olması yada kullanılıp kulanılmaması dahil çeşitli kunular storage engine e özel farklılıklar gösterebiliyor. Aşağıdaki linkte Analyze Table komutu ile ilgili açıklamalar mevcut. http://dev.mysql.com/doc/refman/5.1/en/analyze-table.html İyi çalışmalar. Barış AKVERDİ _____ From: linux-programlama-boun...@liste.linux.org.tr [mailto:linux-programlama-boun...@liste.linux.org.tr] On Behalf Of serdar güler Sent: Friday, September 24, 2010 9:50 AM To: Özgür yazılımlarla çeşitli dillerde yazılım geliştirme Subject: [Linux-programlama] Re:MySQL, INDEX ve SELECT performansı / limiti / ayarı ? Selamlar, MySQL in sistem parametrelerinde dolayı index devre dışı kalmaz, index in kullanılıp kullanılmayacağına karar veren mekanizma optimizer , eğer inde i kullanmasının full table scan e göre daha iyi olacağını düşünüyorsanız. USE INDEX, FORCE INDEX gibi hintlerle SQL i zenginleştirebilirsiniz. Kolay gelsin... 2010/9/24 Baris CUHADAR <pard...@gmail.com> Tarihleri integer - unixtimestamp olarak saklamanız, index büyüklüğünüzü azaltıp, indexleme zamanını kısaltıp, ayrıca sıralama işlemlerini kolaylaştırabilir. integer 4 byte, datetime 8 byte yer kaplıyor. Bu işlemler program kodunuzu değiştirmenizi gerektirecektir. On 09/24/2010 02:11 AM, Nuri AKMAN wrote: Arkadaşlar, MySQL'de listeler adlı bir tablom var ve islem_tarihi adlı alan için index tanımım var. Tabloda 250.000+ kayıt var. SQL1 sorguma 5431 kayıt geliyor ve süre: 0.027 saniye, SQL2 sorguma 5570 kayıt geliyor ve süre: 3.510 saniye (130 kat daha yavaş !) SQL1 : SELECT * FROM listeler WHERE islem_tarihi between '2010-09-20' AND '2010-12-31' SQL2 : SELECT * FROM listeler WHERE islem_tarihi between '2010-09-19' AND '2010-12-31' Çalışan SQL'i analiz ettiğimde: SQL1 için sadece 5431 satırı işlendiğini görüyorum SQL2 için tablonun tüm satırlarının (250.000 satırın hepsinin) işlediğini görüyorum. Yani, index devre dışı kalıyor :( Bu durumun MySQL'in server parametrelerinden birinden kaynaklı olduğunu düşünüyorum. Fakat bulamadım... Bu durumu nasıl düzeltebilirim? Selamlar, Nuri Akman _______________________________________________ Linux-programlama mailing list Linux-programlama@liste.linux.org.tr https://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php _______________________________________________ Linux-programlama mailing list Linux-programlama@liste.linux.org.tr https://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php -- Serdar Güler No virus found in this incoming message. Checked by AVG - www.avg.com Version: 9.0.856 / Virus Database: 271.1.1/3137 - Release Date: 09/23/10 21:34:00
_______________________________________________ Linux-programlama mailing list Linux-programlama@liste.linux.org.tr https://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php