如何优化MySQL的limit语句
作者:bea
MySQL的优化是非常重要的。其中最常用同时也是最需要优化的就是limit语句。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。
同样是取10条数据
select * from yanxue8_visit limit 10000,10
和
select * from yanxue8_visit limit 0,10
就不是一个数量级别的。
网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。
文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核(3GHZ) +4G内存 mysql 5.0.19)
1、offset比较小的时候。
select * from yanxue8_visit limit 10,10
多次运行,时间保持在0.0004-0.0005之间
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。
2、offset大的时候。
select * from yanxue8_visit limit 10000,10
多次运行,时间保持在0.0187左右
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
从上面二个实例我们可以这样来选择:如果从数据库中取数据的偏移位置小的话,就直接使用limit语句,也就是第一种方法;如果偏移位置大的话,就使用下面的方法来区数据要快很多。
猜你喜欢
您可能感兴趣的文章:
- mysql当天日期函数使用小结
- sql查询优化:查询语句优化小结
- MySQL教程之error 150错误提示解决办法
- MySQL教程之六种强制修改Root密码方法
- 解决MySQL 1067错误方法
- 完美解决MySQL中文乱码问题
- MySQL字段类型Verchar大小长度介绍
- MySQL控制台导入SQL文件问题
- mysql #145原因以及解决方案
- mysql error 2003错误原因以及解决方案
- mysql导入超大sql文件方法
- 解决提示#2002无法登录MySQL服务器
- 如何快速将sql文件导入mysql数据库中
- 如何正确导出MYSQL数据库中的数据
- 阿里DBA简朝阳与你面对面说MySQL技术
- 总结修改MySQL密码方法和限制访问
- 如何选择数据库的主键
- 优化索引提高MySQL性能
- 优化MySQL之SQL索引优化方法