Здравствуйте все!
Нужна помощь в оптимизации запросов.
Запрос такого вида:
SELECT DISTINCT
e.* ,
IF(a_promo.alt_price,
a_promo.alt_price,
IF((a_promo.discount >0)AND(a_promo.departament_key =23769),
a_departaments.DepRetail * a_promo.discount /100,
IF(e.Key_Sip NOT IN (40823,40824,40838,40839,40840,40841,40842,40843,40844,40845,40846,40825,40847,40848,40849,40850,40851,40852,40853,40854,40826,40855,40856,40857,40858,40859,40860,40861,40827,40862,40863,40864,40865,40866,40867,40868,40869,40828,40870,40871,40872,40873,40874,40875,40876,40877,40829,40878,40879,40880,40830,40881,40882,40883,40884,40831,40885,40886,40887,40888,40889,40890,40891,40892,40832,40893,40894,40895,40896,40897,40833,40898,40899,40900,40901,40902,40835,40903,40904,40905,40906,40907,40908,40909,40910,40911,40836,40912,40913,40914,40915,42490,42491,42500,42501,42502,42503,42504,42505,42492,42506,42507,42508,42509,42510,42511,42493,42512,42513,42494,42514,42515,42516,42517,42495,42518,42496,42519,42520,42521,42522,42523,42524,42525,42526,42497,42527,42528,42529,42530,42531,42532,42533,42534,42498,42535,42536,42537,42538,42539,42499,42540,42541,42542,42543,23224,25302,25303,25304,25305,25307),
a_departaments.DepRetail* 0.9,
a_departaments.DepRetail)
)
) AS retailPrice,
a_departaments.DepRetail
FROM a_elements e
LEFT JOIN a_promo USING (Key_G)
LEFT JOIN a_elements_have_images USING (Key_G)
LEFT JOIN a_departaments USING (Key_G),
a_elements_epson
WHERE a_elements_epson.Key_G = e.Key_G
AND e.Key_Sip IN (17060,17061,17062,17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,17099,17100,17101,17102,23739,17103,17104,17105,17106,17107,17108,17109,17110,17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,17123,17124,17125,17126,17127,17128,17129)
ORDER BY exist DESC, have_image DESC, valRating ASC, e.Key_Sip DESC
LIMIT 800,10;
Работает примерно секунду с небольшим. Может быть нужны дополнительные индексы. Я читал, что использование IF - наименее удачный вариант из возможных. От него я мог бы избавиться, но может быть есть возможность оставить его и использовать доп.индекс?
Спасибо.
Отредактированно Madgeniy (07.08.2014 10:41:50)