赞
踩
你的位置:
问答吧
-> PHP
-> 问题详情
为什么用了limit还会进行全表扫描?
现有一张100万行记录的表test,
执行以下语句后:
explain select * from test limit 80000, 100;
返回的rows为1000,000,rows等于总行数,也就是说明进行了全表扫描,这是怎么回事呢?我明明已经加了limit了.
作者: zzzbbs
发布时间: 2007-01-29
是explain解析的BUG吗
作者: zzzbbs
发布时间: 2007-01-29
顶
作者: zzzbbs
发布时间: 2007-01-29
说明你的 select 有问题,你可以单独执行一下select查询,看行不行
作者: my_web
发布时间: 2007-01-29
去掉explain后执行select只返回100行,加上explain解析出的rows就成了1000000行
作者: zzzbbs
发布时间: 2007-01-29
在 explain 的结果中,rows列显示MySQL相信它必须检验以执行查询的行数(手册语)。
这个结果与是否有 limit 子句无关。
当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联结和以什么次序联结的信息。
作者: xuzuning
发布时间: 2007-01-30
explain
作者: iasky
发布时间: 2007-01-30
要看where 条件是什么才行。
作者: yueliangdao0608
发布时间: 2007-01-30
是的,要看你后面那个where条件
或者group by id 因为where是过滤条件
还有最好做索引
作者: uuq
发布时间: 2007-01-30
limit按理也应该是过滤条件啊,limit没有提速效果的话,还要limit做什么?
作者: zzzbbs
发布时间: 2007-01-30
limit 没有提速效果,
它只是用来得到表的某些记录。
作者: yueliangdao0608
发布时间: 2007-01-30
怎么没有效果呢?
select * from test;
1000000 in 2.62 secs
select * from test limit 1000;
1000 rows in 0.01 secs
作者: zzzbbs
发布时间: 2007-01-30
怎么没有提速效果呢?
select * from test;
1000000 in 2.62 secs
select * from test limit 1000;
1000 rows in 0.01 secs
作者: zzzbbs
发布时间: 2007-01-30
嗯,你试着反过来运行一下:
select * from test limit 1000;
select * from test;
作者: helloyou0
发布时间: 2007-01-31
where <> 不行么?
作者: stefenjun
发布时间: 2007-01-31
晕,limit只是限制输出,和查询有什么关系???
作者: linanbox21
发布时间: 2007-02-05
up
作者: ai_ni
发布时间: 2007-02-05
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。