|
MySQL.RU - Webboard
Вернуться
Странное поеведение индексов (SveRel) 13/08/2010 - 20:15:34
Re: Странное поеведение индексов (Diter) 16/08/2010 - 18:49:08
Re: Понял! (SveRel) 16/08/2010 - 23:34:52
> Original message text:
> From: SveRel - 13/08/2010 - 20:15:34
> Subject:Странное поеведение индексов
> -----------------
> Есть список статей привязанных к компаниям. Связь: много-ко-многим и для этого используется таблица связей состоящая из двух столбцов. Что бы найти все статьи привязанных к категории #5 я выполняю запрос:
> ====================
> EXPLAIN SELECT *
> FROM `articles` AS `r1`
> WHERE `r1`.`id`
> IN (
> SELECT `r2`.`article_id`
> FROM `companies_articles_rel` AS `r2`
> WHERE `r2`.`company_id` = 5
> )
> =====================================
>
> Прикол в том, что MySQL не хочет использовать индексы. Она пишет:
> possible_keys = NULL.
> Хотя если выполнить запрос:
> =====================================
> EXPLAIN SELECT *
> FROM `articles` AS `r1`
> WHERE `r1`.`id`
> IN (6)
> =====================================
>
> Тогда possible_keys = PRIMARY - т.е. всё таки она их использует, но не тогда когда выполняется вложенный SQL-запрос.
>
> P.S.> Сам результат первого SQL-запроса правильный - т.е. возвращает она то что мне нужно. Но почему не используются индексы???
>
From: Diter - 16/08/2010 - 18:49:08
Subject:Странное поеведение индексов
-----------------
А что показывает запрос?
EXPLAIN SELECT *
FROM `articles` AS `r1`
WHERE `r1`.`id`
IN (
SELECT `r2`.`article_id`
FROM `companies_articles_rel` AS `r2`
WHERE `r2`.`company_id` = 6
)
Вообще-то лучше не использовать вложенные запросы, потому как они будут исполняться для каждого результата из главного запроса.
Как насчет вот этого запроса?
SELECT r1.*
FROM `articles` AS r1
LEFT JOIN `companies_articles_rel` AS r2 ON r2.`article_id` = r1.`id` AND r2.`company_id` = 6
WHERE r2.`article_id` IS NOT NULL
Только для таблицы companies_articles_rel нуже еще индекс (article_id,company_id)
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
37358
|
|