<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[Mysql 的limit优化]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[数据库技术]]></category>
<pubDate>Wed, 04 Jun 2008 15:44:32 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便，但数据量一大的时候，limit的性能就急剧下降。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同样是取10条数据<br/><br/><div class="code"><br/>select * from yanxue8_visit limit 10000,10<br/></div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和<br/><br/><div class="code"><br/><br/>select * from yanxue8_visit limit 0,10<br/></div><br/><br/><br/>就不是一个数量级别的。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;网上也很多关于limit的五条优化准则，都是翻译自mysql手册，虽然正确但不实用。今天发现一篇文章写了些关于limit优化的，很不错。原文地址：<a href="http://www.zhenhua.org/article.asp?id=200" target="_blank">http://www.zhenhua.org/article.asp?id=200</a><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;文中不是直接使用limit，而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据，明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。（测试环境win2033+p4双核(3GHZ) +4G内存 mysql 5.0.19）<br/><br/>1、offset比较小的时候。<br/><br/><div class="code"><br/><br/> select * from yanxue8_visit limit 10,10<br/></div><br/><br/><br/>&nbsp;&nbsp; 多次运行，时间保持在0.0004-0.0005之间<br/><br/><div class="code"><br/><br/>&nbsp;&nbsp;Select * From yanxue8_visit Where vid &gt;=(<br/>Select vid From yanxue8_visit Order By vid limit 10,1<br/>) limit 10<br/><br/></div><br/><br/>&nbsp;&nbsp;多次运行，时间保持在0.0005-0.0006之间，主要是0.0006<br/> 结论：偏移offset较小的时候，直接使用limit较优。这个显然是子查询的原因。<br/><br/><br/>2、offset大的时候。<br/><br/><div class="code"><br/><br/> select * from yanxue8_visit limit 10000,10<br/><br/></div><br/><br/><br/>&nbsp;&nbsp; 多次运行，时间保持在0.0187左右<br/><br/><div class="code"><br/><br/>&nbsp;&nbsp;Select * From yanxue8_visit Where vid &gt;=(<br/>Select vid From yanxue8_visit Order By vid limit 10000,1<br/>) limit 10<br/><br/><br/></div><br/><br/>多次运行，时间保持在0.0061左右，只有前者的1/3。可以预计offset越大，后者越优。<br/><br/><br/>Tags - <a href="http://www.dzhope.com/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.dzhope.com/tags/limit/" rel="tag">limit</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] Mysql 的limit优化]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>