Следующий запрос:
SELECT tbl_yaca_sites.`id_site` FROM `tbl_yaca_sites`
INNER JOIN `tbl_relation` ON tbl_relation.id_website = tbl_yaca_sites.id_site
INNER JOIN `tbl_yaca_directories` ON tbl_yaca_directories.id_record = tbl_relation.id_category
INNER JOIN `tbl_applications` ON tbl_applications.id_site = tbl_yaca_sites.id_site
where
tbl_applications.id_application IN (41)
and tbl_yaca_directories.type = 0
AND tbl_yaca_directories.work = 1
AND tbl_relation.work = 1 GROUP BY tbl_yaca_sites.`id_site`
Существует много индексов:
- tbl_yaca_sites - для основного id_site и еще одного id_site (то же поле, но другой индекс)
- tbl_relation - для первичного идентификатора и комбинированного индекса (id_site, id_category, работа)
- tbl_yaca_directories - для первичного id_record и комбинированного индекса 'тип' (тип, работа)
- tbl_applications - тамне являются первичными.Имеет один индекс id_application.
Запрос работает хорошо, когда я настраиваю только описанные индексы (но без 'group by').Я проверял это много раз.
Итак, если я выполню этот запрос без группы , это займет одну секунду.Достаточно хороший результат, где около 200 000 записей в каждой таблице.Добавлено 'group by', всегда занимает 16 секунд.
, если я выполняю операцию:
SELECT id_site FROM (SELECT tbl_yaca_sites.`id_site` FROM `tbl_yaca_sites`
INNER JOIN `tbl_relation` ON tbl_relation.id_website = tbl_yaca_sites.id_site
INNER JOIN `tbl_yaca_directories` ON tbl_yaca_directories.id_record = tbl_relation.id_category
INNER JOIN `tbl_applications` ON tbl_applications.id_site = tbl_yaca_sites.id_site
where
tbl_applications.id_application IN (41)
and tbl_yaca_directories.type = 0
AND tbl_yaca_directories.work = 1
AND tbl_relation.work = 1 ) as tbl GROUP BY id_site
, это занимает 1,7 секунды.
Это запрос объяснения:
1, 'SIMPLE', 'tbl_yaca_sites', 'index', 'PRIMARY,id_site', 'PRIMARY', '4', '', 102358, 'Using index'
1, 'SIMPLE', 'tbl_applications', 'ref', 'pair', 'pair', '8', 'webservices.tbl_yaca_sites.id_site,const', 1, 'Using index'
1, 'SIMPLE', 'tbl_relation', 'ref', 'comb', 'comb', '4', 'webservices.tbl_yaca_sites.id_site', 1, 'Using where; Using index'
1, 'SIMPLE', 'tbl_yaca_directories', 'eq_ref', 'PRIMARY,type', 'PRIMARY', '4', 'webservices.tbl_relation.id_category', 1, 'Using where'
Также попытался добавить count (*) |считать (id_site) |кол (1).результат тот же.
Почему так долго?Кто-нибудь может сказать мне, что я пропустил?
Спасибо всем заранее!