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
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap