mysql ve covering index hadisesi
by admin on Aug.13, 2009, under veritabanı sistemleri
Veritabanlarında büyük verilerle çalışırken dikkatli olmak gerekiyor. komplex sorguları optimize etmek çok önemli. Misal mysql’de büyük veriler içerisinde limit komutu ile sayfalama yaparken belli bir süre sonra (limit 10000, 30 gibi) sorguların çok uzun sürdüğünü görebilirsiniz. Bu süreleri kısaltmak için kullanılan “covering index” tekniği ise mantık olarak şöyle, önce istediğimiz fieldları istediğimiz tablodan çekecek select komutunu yazıyoruz. Ardından bunu sadece primary keyi çeken ve istediğimiz kısıtları içeren query ile joinliyoruz. Böylece önce inner query çalışıp where ile belirttiğimiz kısıttaki ve limitteki id’leri index üzerinden alıyor, daha sonra bu id’leri gene index üzerinden sorgulayıp verileri getiriyor. Örnek query aşağıda:
EXPLAIN
SELECT *
FROM products
JOIN (
SELECT prod_id
FROM products
WHERE actor=’SEAN CARREY’ AND title LIKE ‘%APOLLO%’
) AS t1 ON (t1.prod_id=products.prod_id)
Gönül isterdi ki mysql bunu kendi akıl etsin ama malesef