MYSQL的优化是非
常重要的。其他最常用
也最需要优化的就是l
imit。mysql
的limit给分页带
来了极大的方便,但数
据量一大的时候,li
mit的性能就急剧下
降。
同样是取10条数据
select * from yanxue8_vi sit limit 10000,10 和
select * from yanxue8_vi sit limit 0,10
就不是一个数量级别的 。
网上也很多关于lim it的五条优化准则,
都是翻译自mysql
手册,虽然正确但不实
用。今天发现一篇文章
写了些关于limit
优化的,很不错。
文中不是直接使用li mit,而是首先获取
到offset的id
然后直接使用limi
t size来获取数据。
根据他的数据,明显要
好于直接使用limi
t。这里我具体使用数
据分两种情况进行测试
。(测试环境win2
033+p4双核 (3GHZ) +4G内存 mysql 5.0.19)
1、offset比较 小的时候。
select * from yanxue8_vi sit limit 10,10
多次运行,时间保持在 0.0004-0.0
005之间
Select * From yanxue8_vi sit Where vid >=(
Select vid From yanxue8_vi sit Order By vid limit 10,1
) limit 10
多次运行,时间保持在 0.0005-0.0
006之间,主要是0
.0006
结论:偏移offse t较小的时候,直接使
用limit较优。这
个显然是子查询的原因
。
2、offset大的 时候。
select * from yanxue8_vi sit limit 10000,10
多次运行,时间保持在 0.0187左右
Select * From yanxue8_vi sit Where vid >=(
Select vid From yanxue8_vi sit Order By vid limit 10000,1
) limit 10
多次运行,时间保持在 0.0061左右,只
有前者的1/3。可以
预计offset越大
,后者越优。
以后要注意改正自己的 limit语句,优化
一下mysql了
同样是取10条数据
select * from yanxue8_vi
select * from yanxue8_vi
就不是一个数量级别的
网上也很多关于lim
文中不是直接使用li
1、offset比较
select * from yanxue8_vi
多次运行,时间保持在
Select * From yanxue8_vi
Select vid From yanxue8_vi
) limit 10
多次运行,时间保持在
结论:偏移offse
2、offset大的
select * from yanxue8_vi
多次运行,时间保持在
Select * From yanxue8_vi
Select vid From yanxue8_vi
) limit 10
多次运行,时间保持在
以后要注意改正自己的