珂珂的个人博客 - 一个程序猿的个人网站

mysql order by limit 效率问题

    昨晚在部署一个网站的时候死活打不开,经排查是主页的查询问题,将sql拿出来执行竟然要97秒。自己的博客数据量小,没有发现这个问题,但是这里有6000多条。在博客的改进过程中,考虑到正文表数据量较大,可能会出现效率问题,我将文章的正文分离出来一个表再与文章表关联。

   起初怀疑是视图问题,因为之前遇到过。还有怀疑是select count 的问题,在mysql 中  select count(*) from a 没有问题,但是select count(*) from (select * from a)  在a表数据很多的情况下就会有问题,但是sqlserver中没有该现象。

   逐渐排查这个sql,去掉order by 后发现不到1秒。再逐渐排查,将一个Left join 去掉后提高不少,本来order by 和limit 也没有用到这个表,于是将它拿到外面来。之前是这样   select * from a left join b on a.id=b.id order by xxx limit 0,10  修改后   select * from (select * from a order by xxx limit 0,10) t left join b on t.id=b.id order by xxx 修改后果然效率提高不少。

   为什么order by  limit  会出现这么慢呢,怀疑是关联的字段没有索引,建立索引后,果然查询很快了。正文表和文章表是一对一的关系,但正文表我却没有用文章ID作为主键,而用的另一个Guid  导致没有索引。  但是在sqlserver 中查询并不会慢,不知道为什么。

   全部干掉正文ID用文章ID作为主键,从发现问题到调整完竟然花了4个小时....


上一篇:多线程域名查询工具

下一篇:个人代码全部开源


0 评论

查看所有评论

给个评论吧