Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37358



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |