百万数据下mysql条件查询及分页查询的注意事项

藏色散人
发布: 2019-04-20 09:18:25
转载
3631 人浏览过

接上一节《百万数据mysql分页问题》,我们加上查询条件:

select id from news 
where cate = 1
order by id desc 
limit 500000 ,10 
查询时间 20 秒
登录后复制

好恐怖的速度!!利用第一节《百万数据mysql数据测试环境介绍》知识进行优化:

select * from news
where cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10 
查询时间 15 秒
登录后复制

优化效果不明显,条件带来的影响还是很大!在这样的情况下无论我们怎么去优化sql语句就无法解决运行效率问题。那么换个思路:建立一个索引表,只记录文章的id、分类信息,我们将文章内容这个大字段分割出去。

表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ]
-------------------------------------------------
idint11主键自动增加
cateint11索引
登录后复制

在写入数据时将2张表同步,查询是则可以使用news2 来进行条件查询:

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10
登录后复制
登录后复制

注意条件 id > 后面使用了news2 这张表!

运行时间 1.23秒,我们可以看到运行时间缩减了近20倍!!数据在10万左右是查询时间可以保持在0.5秒左右,是一个逐步接近我们能够容忍的值!

但是1秒对于服务器来说依然是一个不能接受的值!!还有什么可以优化的办法吗??我们尝试了一个伟大的变化:

将 news2 的存储引擎改变为innodb,执行结果是惊人的!

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10
登录后复制
登录后复制

只需要 0.2秒,非常棒的速度。为什么会有怎么大的差别呢?请观看下一篇 mysql存储引擎详解。

以上是百万数据下mysql条件查询及分页查询的注意事项的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:hcoder.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板