Pythontr

husonet | Tarih: 19.03.2012

mysql view algorithm=merge

Merhaba,

Mysql view lerinde algorithm=merge performans açısından fark oluşturuyor. Birden fazla table n indexlenmesini sağlıyor.

Örnek Sql 0.20 saniyede sonuç gelirken
SELECT `haberler`.`ID`
FROM `haberler_translate`
JOIN `haberler` ON `haberler_translate`.`HABERLER_ID` = `haberler`.`ID`
WHERE `haberler`.`TARIH` > '2012-03-18 00:00:00'
AND `haberler_translate`.`DIL_ID` = '2'
AND `haberler`.`SILINDI` = 'F'
AND `haberler`.`ONAY` IN ('1', '2')
ORDER BY `haberler_translate`.`GORUNTULEME` desc
LIMIT 15;


Örnek 0.01 saniyeye düşüyor
create algorithm=merge view v_gorunum_az as
SELECT `haberler`.`ID`, `haberler`.`KATEGORI_ID`, `haberler`.`TARIH`, `haberler_translate`.`BASLIK`, `haberler_translate`.`KEYWORD`, `haberler_translate`.`ICERIK`, `haberler`.`RESIM`, `haberler`.`KAYNAK`, `haberler_translate`.`DIL_ID`, `haberler_translate`.`GORUNTULEME`, `haberler`.`ONAY`, `haberler`.`SILINDI` FROM `haberler` JOIN `haberler_translate` ON `haberler_translate`.`HABERLER_ID` = `haberler`.`ID` WHERE `haberler`.`TARIH` > CONCAT(CURDATE(), ' 00:00:00') AND `haberler_translate`.`DIL_ID` = '2' AND `haberler`.`SILINDI` = 'F' AND `haberler`.`ONAY` IN ('1', '2') ORDER BY `haberler_translate`.`GORUNTULEME` desc LIMIT 15;


Kullanımı Normal tablo gibi
SELECT ID 
FROM v_gorunum
WHERE v_gorunum.`DIL_ID` = '2'
LIMIT 15;


Not merge nin desteklemediği kısımlar

  • (SUM(), MIN(), MAX(), COUNT(), ve benzeri)
  • DISTINCT
  • GROUP BY
  • HAVING
  • LIMIT
  • UNION or UNION ALL
  • Subquery içinde seçim listesi