USE INDEX

Bir sorun düşünün ki, size blog açmak için sebep olsun…

İşte tam olarak öyle bir sorunu çözüp de bu blogu açma kararı verdim. Bazen öyle şeyler geliyor ki başınıza, sebebini anlayamıyor, haliyle çözüm üretemiyorsunuz.

Bir tablomda aşağıdaki alanlar (sadece önemli olanlar) mevcuttu;

  • Üretici
  • Bayii
  • Yönetici
  • Müşteri
  • İşlem tipi (İade veya Satın alma)
  • Para Birimi
  • Miktar
  • Fatura Kodu
  • Oluşturma Tarihi
  • Düzenleme Tarihi
  • Silme Tarihi

Bütün veriler tek tabloda toplanıyordu. Raporlar için bir çok defa aynı tabloya subquery atan bir sorgu vardı. Mevcut indexler yetersizdi ama performans da çok fena sayılmazdı. Ben indexleri düzenledikten sonra olanlar oldu.

Kabul edilebilir performansta olan sistemi hızlandırmak isterken, bunu 11 saniyeye kadar çıkarmayı başarmıştım. Sebeplerini günlerce araştırmama rağmen tatmin edici bir sonuca varamadım.

MySQL, index sayısı belli bir sayının üstüne çıktığında, hangi indexleri kullanacağını belirleyemiyormuş. Çok tuhaf değil mi? Böyle bir sorun yaşandığında, tabloya hangi indexleri kullanması gerektiğini (Normal sorguda da olur, subquery’de de olur. Kısaca FROM {table_name} ‘dan sonra USE INDEX (index_1,index_2,...) şeklinde tanımlamak yeterli oluyormuş.

Böylece tablo hangi indexleri okuyacağını biliyor ve bu indexlerle doğru sonuca en hızlı şekilde varabiliyor.

Örnek Kod:

SELECT colTest, col1, col2 ... FROM tblName USE INDEX (col1,col2) WHERE col1='TEST' AND col2 LIKE '%SHIT%';

Bir cevap yazın

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