У меня есть запрос, который я превратил в представление, которое работает нормально. Но таблица site_phrase sp
, кажется, не использует столбец и проходит через все записи в таблице. Почему это? Вот запрос:Почему мой запрос не использует этот индекс?
EXPLAIN SELECT
`p`.`id` AS `id`,
`p`.`text` AS `phrase`,
`p`.`ignored` AS `ignored_phrase`,
`p`.`client_id` AS `client_id`,
`s`.`id` AS `site_id`,
`s`.`sub_domain` AS `sub_domain`,
`s`.`competitor` AS `competitor`,
`s`.`ignored` AS `ignored_site`,
`pc`.`id` AS `pc_id`,
`pc`.`name` AS `pc_name`,
`psc`.`id` AS `psc_id`,
`psc`.`name` AS `psc_name`,
`p`.`volume` AS `volume`,
MIN(`pos`.`position`) AS `position`,
`pos`.`id` AS `pos_id`
FROM `client` c
JOIN client_site cs ON cs.client_id = c.id
JOIN site s ON s.id = cs.site_id
JOIN site_phrase sp ON sp.site_id = s.id
JOIN phrase p ON p.id = sp.phrase_id
JOIN `position` pos ON pos.phrase_id = sp.phrase_id
AND pos.site_id = sp.site_id
LEFT JOIN `phrase_sub_category` `psc`
ON `psc`.`id` = `p`.`phrase_sub_category_id`
LEFT JOIN `phrase_category` `pc`
ON `pc`.`id` = `psc`.`phrase_category_id`
GROUP BY `p`.`id`,`s`.`id`,`serp`.`id`
ORDER BY `p`.`id`,`pos`.`position`
А вот скриншот вывода выше запрос получает, когда я объясняю/не ОПИСАТЬ его http://img827.imageshack.us/img827/3336/indexsql.png
Независимо от того, как я изменить порядок выше и как таблиц они соединены, первая или вторая таблица всегда, кажется, выполняет какое-то сканирование таблицы. В примере скриншота таблица проблем - sp
. Этими таблицами являются тип innoDB, и есть соответствующие индексы и внешние ключи во всех таблицах, к которым я подключаюсь. Любые идеи были бы полезны.
Каков запрос? – FrustratedWithFormsDesigner
Тот, у кого все JOINS выше. Я просто удалил поля, которые я выбираю. EXPLAIN SELECT ..... Это все – Nathan