QuadMan
Новичок
помогите объединить два запроса!
Подскажите, пожалуйста.. smile.gif
Чувствую, что все просто, но... башка уже не варит.
Есть таблица с полями CTYPE = enum ('C','P','R') и CDATE = DATETIME, покрывающим индексом по полям (CTYPE,CDATE) и отдельный индекс по CTYPE. Записей - около 10000.
Есть запрос:
(1) SELECT * FROM `TAB1` WHERE `CTYPE`='C' ORDER BY `CDATE` LIMIT 100
(2) SELECT * FROM `TAB1` WHERE `CTYPE`='P' ORDER BY `CDATE` LIMIT 100
каждый из этих запросов выполняется очень быстро 0.0015 сек
хочу объединить эти запросы в один
SELECT * FROM `TAB1` WHERE `CTYPE` IN ('C',P') ORDER BY `CDATE` LIMIT 100 - выполняется в 40!!! раз медленнее!!! EXPLAIN пишет в поле extra - using filesort. Похоже проблема в этом...
попробовал переписать с UNION:
EXPLAIN SELECT * FROM `TAB1` WHERE `CTYPE`='C'
UNION ALL
SELECT * FROM `TAB1` WHERE `CTYPE`='P' ORDER BY `CDATE` LIMIT 100, но в скорости тоже не выиграл, using filesort остался... выполняется тоже медленно.
помогите советом, пожалуйста, как эти два запроса объединить в один без такой потери в скорости! smile.gif
ЗЫ. можно, конечно, выкрутиться так: SELECT * FROM `TAB1` WHERE `CTYPE`<>'R' ORDER BY `CDATE` LIMIT 100, но это лишь частный случай, а хотелось бы узнать решение для более общего случая
спасибо
Подскажите, пожалуйста.. smile.gif
Чувствую, что все просто, но... башка уже не варит.
Есть таблица с полями CTYPE = enum ('C','P','R') и CDATE = DATETIME, покрывающим индексом по полям (CTYPE,CDATE) и отдельный индекс по CTYPE. Записей - около 10000.
Есть запрос:
(1) SELECT * FROM `TAB1` WHERE `CTYPE`='C' ORDER BY `CDATE` LIMIT 100
(2) SELECT * FROM `TAB1` WHERE `CTYPE`='P' ORDER BY `CDATE` LIMIT 100
каждый из этих запросов выполняется очень быстро 0.0015 сек
хочу объединить эти запросы в один
SELECT * FROM `TAB1` WHERE `CTYPE` IN ('C',P') ORDER BY `CDATE` LIMIT 100 - выполняется в 40!!! раз медленнее!!! EXPLAIN пишет в поле extra - using filesort. Похоже проблема в этом...
попробовал переписать с UNION:
EXPLAIN SELECT * FROM `TAB1` WHERE `CTYPE`='C'
UNION ALL
SELECT * FROM `TAB1` WHERE `CTYPE`='P' ORDER BY `CDATE` LIMIT 100, но в скорости тоже не выиграл, using filesort остался... выполняется тоже медленно.
помогите советом, пожалуйста, как эти два запроса объединить в один без такой потери в скорости! smile.gif
ЗЫ. можно, конечно, выкрутиться так: SELECT * FROM `TAB1` WHERE `CTYPE`<>'R' ORDER BY `CDATE` LIMIT 100, но это лишь частный случай, а хотелось бы узнать решение для более общего случая
спасибо