







|
MySQL.RU - Webboard
Вернуться
Оптимизация запроса с подзапросом (Сергей) 24/07/2007 - 15:14:17
Re: Оптимизация запроса с подзапросом (AXAE) 02/08/2007 - 06:50:46
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)
Как указать оптимизатору, что сначала он должен выполнить подзапрос, а потом на основании его основной?
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
31968
|
|