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

Cevap