mysql查询优化,请大神来解决一下迷惑

ffvsnn520 发布于 2014/06/30 10:30
阅读 226
收藏 0

由于文件没办法超过200K,所以只能复制了.语句:'SELECT pid FROM xxxxx WHERE tid=3054300 ORDER BY dateline  LIMIT 10;'

explain得出的结果.走到了索引对吗?但是就这条语句需要至少80秒以上.而却数据不是很多,这条语句我把limit去掉后,反而数据变的飞快.求解1.是什么原因导致我加了limit还慢?求解2:而且对于索引而言.不是应该先走前面的索引吗?这里是索引的情况.

Table_locks_immediate  2    Bytes_sent 434

Key_read_requests 38   Bytes_received 89

其他都是0,个别为1.情况都在这里了.希望大神可以帮忙解决一下疑惑.


以下是问题补充:

@ffvsnn520:其实我很好问一下.同样的结构,同样的数据量,同样的索引,为什么在不同的机器上走到索引会不一样.到底是什么参数影响的了? (2014/06/30 11:38)
加载中
0
kenping
kenping
SELECT  t.pid
FROM    (
        SELECT dateline
        FROM xxxxx
        WHERE tid=3054300
        ORDER BY dateline
        LIMIT 0,10
        ) q
JOIN xxxxx t

ON      t.id = q.id

这样如何?

f
ffvsnn520
回复 @kenping : 应该是对的.可能是由于表本身的缘故,导致出来的数据不一样.不知道是哪个状态导致我本身的查询变慢,好苦恼啊.
kenping
kenping
回复 @ffvsnn520 : “走到索引”,这个我也不太了解,顺序不同,但是结果对吗?外面再来一次ORDER BY dateline的话,估计效率又下去了
f
ffvsnn520
回复 @ffvsnn520 : 还有,这条数据查询出来的结果和我那句查询出来的结果顺序有些不同.
f
ffvsnn520
回复 @kenping : 这个可以.但是程序里面是不需要带有select(这种格式的写法.非常感谢您.只是我很好奇为什么我那句简单的查询2W条数据会有80多秒.而却我发现在主上和本地.同样的结构,查询走到索引也不同.请问一下您知道吗?非常感谢您的回答
kenping
kenping
回复 @ffvsnn520 : 我写错了,应该是 ON t.dateline=q.dateline ?
下一页
0
温佐镜
温佐镜
建立( tid,dateline)组合索引看看,排序字段也放在索引中,不需要回表
0
DanielTo
DanielTo

引用来自“温佐镜”的评论

建立( tid,dateline)组合索引看看,排序字段也放在索引中,不需要回表
试下这个LZ
0
pleatu
pleatu
SELECT pid FROM xxxxx WHERE tid=3054300 ORDER BY dateline  LIMIT 10;

楼主,你把order by 去掉,limit 还慢吗?

返回顶部
顶部