2010-10-01 5 views
0

У меня есть запрос, который я превратил в представление, которое работает нормально. Но таблица 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, и есть соответствующие индексы и внешние ключи во всех таблицах, к которым я подключаюсь. Любые идеи были бы полезны.

+0

Каков запрос? – FrustratedWithFormsDesigner

+0

Тот, у кого все JOINS выше. Я просто удалил поля, которые я выбираю. EXPLAIN SELECT ..... Это все – Nathan

ответ

1

MySQL будет использовать полное сканирование таблицы, если оно определит, что оно быстрее, чем используемый индекс. В случае вашей таблицы SP - всего 1300 записей сканирование таблицы может быть столь же быстрым, как индекс.

Смежные вопросы