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




MySQL.RU - Webboard



Вернуться
Оптимизация запроса с подзапросом (Сергей) 24/07/2007 - 15:14:17
      Re: Оптимизация запроса с подзапросом (AXAE) 02/08/2007 - 06:50:46

> Original message text:
> From: Сергей - 24/07/2007 - 15:14:17
> Subject:Оптимизация запроса с подзапросом
> -----------------
> Есть запрос:
>
> SELECT * FROM Messages WHERE Messages.Ask IN (SELECT Ask.Ask FROM Ask WHERE Ask.DateTime<20070710)
>
> Я переписал таким образом:
>
> SELECT * FROM Messages WHERE EXISTS (SELECT 1 FROM Ask WHERE Ask.Ask = Messages.Ask AND Ask.DateTime<20070710)
>
> Однако оптимизатор попрежнему просматривает вс таблицу `Messages`
>
> mysql> EXPLAIN SELECT *
> -> FROM Messages
> -> WHERE EXISTS (
> -> SELECT 1
> -> FROM Ask
> -> WHERE Ask.Ask = Messages.Ask
> -> AND Ask.DateTime < 20070710
> -> )
> -> LIMIT 1 , 30;
> +----+--------------------+----------+------+-----------------------------+---------+---------+--------------------+--------+-------------+
> | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
> +----+--------------------+----------+------+-----------------------------+---------+---------+--------------------+--------+-------------+
> | 1 | PRIMARY | Messages | ALL | NULL | NULL | NULL | NULL | 233869 | Using where |
> | 2 | DEPENDENT SUBQUERY | Ask | ref | PRIMARY,DateTime,DateTime_2 | PRIMARY | 3 | forum.Messages.Ask | 2 | Using where |
> +----+--------------------+----------+------+-----------------------------+---------+---------+--------------------+--------+-------------+
> 2 rows in set (0.00 sec)
>
>
> Как указать оптимизатору, что сначала он должен выполнить подзапрос, а потом на основании его основной?
>


From: AXAE - 02/08/2007 - 06:50:46
Subject:Оптимизация запроса с подзапросом
-----------------
А соединить-то их не удается разве?

SELECT Messages.* FROM Messages INNER JOIN Ask USING (Ask) WHERE Ask.DateTime<20070710)


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
31968



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