Can't understand why optimizer doesn't work properly :(
There is a query:
SELECT *
FROM Messages WHERE EXISTS (
SELECT 1
FROM Ask
WHERE Ask.Ask = Messages.Ask
AND Ask.DateTime < 20070710
)
LIMIT 1 , 30
Optimizer scans all `Messages` table. But all tables are indexed by necessary fields. An EXPLAIN output here:
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)
Subject
Views
Written By
Posted
Can't understand why optimizer doesn't work properly :(
3532
July 23, 2007 02:03PM
2374
July 23, 2007 07:21PM
2451
July 24, 2007 12:26AM
2259
July 24, 2007 02:08AM
2498
July 24, 2007 02:42AM
2222
July 24, 2007 06:02PM
2326
July 25, 2007 11:10PM
Sorry, you can't reply to this topic. It has been closed.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion
of Oracle or any other party.