ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » MySQL及其它开源数据库 » 一个关于mysql执行计划的问题.

标题: 一个关于mysql执行计划的问题.
离线 msdn_lib
一般会员


精华贴数 1
个人空间 0
技术积分 541 (3567)
社区积分 0 (94737)
注册日期 2003-9-5
论坛徽章:0
      
      

发表于 2008-5-5 16:27 
一个关于mysql执行计划的问题.

在mysql 4.1.20下
执行一个主从表的嵌套查询时,发现不能主sql不能引用到索引导致查询速度非常慢,哪位知道是什么问题?
下面是执行计划
mysql> explain select * from QDETAIL where QID in (select QID from QINFO where ID='1234567890');
+----+--------------------+-----------+-----------------+-----------------+---------+---------+------+--------+--------------------------+
| id | select_type        | table     | type            | possible_keys   | key     | key_len | ref  | rows   | Extra                    |
+----+--------------------+-----------+-----------------+-----------------+---------+---------+------+--------+--------------------------+
|  1 | PRIMARY            | QDETAIL | ALL             | NULL            | NULL    |    NULL | NULL | 173488 | Using where              |
|  2 | DEPENDENT SUBQUERY | QINFO     | unique_subquery | PRIMARY,IDX_QID | PRIMARY |       4 | func |      1 | Using index; Using where |
+----+--------------------+-----------+-----------------+-----------------+---------+---------+------+--------+--------------------------+
2 rows in set (0.00 sec)

而切分这两个sql单独执行则都能应用到索引.
mysql> explain select QID from QINFO where ID='1234567890';
+----+-------------+-------+------+---------------+-----------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys | key       | key_len | ref   | rows | Extra                    |
+----+-------------+-------+------+---------------+-----------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | QINFO | ref  | IDX_ID     | IDX_ID |      45 | const |    1 | Using where; Using index |
+----+-------------+-------+------+---------------+-----------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)1 row in set (0.00 sec)

mysql> explain select * from QDETAIL where QID in(11111,222,3333);
+----+-------------+-----------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table     | type  | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-----------+-------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | QDETAIL | range | QID           | QID  |       4 | NULL |    3 | Using where |
+----+-------------+-----------+-------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

[ 本帖最后由 msdn_lib 于 2008-5-6 10:20 编辑 ]


只看该作者    顶部
离线 jinguanding
Eugene


来自 上海
精华贴数 1
个人空间 70
技术积分 2401 (655)
社区积分 79 (3901)
注册日期 2007-3-29
论坛徽章:5
现任管理团队成员2008北京奥运纪念徽章:乒乓球2008北京奥运纪念徽章:柔道生肖徽章2007版:鼠ITPUB新首页上线纪念徽章 
      

发表于 2008-5-5 17:15 
exolain select QDETAIL.* from QDETAIL inner join QINFO  on  QDETAIL.QID = QINFO.QID  where QINFO.ID='1234567890';

你这样试下


__________________
.....做人做事尽心尽力,做学问谦虚求根问底.......
......***寻MySQL方面的兼职***......
.....专业的综合布线、安防公司........................
......www.showgold.cn..............................
......上海亮金信息技术有限公司.......................
只看该作者    顶部
离线 yueliangdao0608
斑竹
上帝他爸


来自 中国-红灯区-深圳
精华贴数 0
个人空间 0
技术积分 3995 (362)
社区积分 1471 (739)
注册日期 2005-2-25
论坛徽章:20
现任管理团队成员紫蜘蛛玉兔生肖徽章2007版:牛2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:击剑
2008北京奥运纪念徽章:足球2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:拳击2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:自行车 

发表于 2008-5-6 09:09 
IN 是没有办法用到索引的。


__________________
-------------------------------------------------------
以前搞维护-搞软件-搞网站-现在搞DBA ---
点击这里访问我的技术博客

最近在练习英语中。。。
Losing my face!
只看该作者    顶部
离线 msdn_lib
一般会员


精华贴数 1
个人空间 0
技术积分 541 (3567)
社区积分 0 (94737)
注册日期 2003-9-5
论坛徽章:0
      
      

发表于 2008-5-6 10:13 
楼上有没有官方手册手册关于in索引问题的讨论章节?


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问