<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[MySQL优化之COUNT(*)效率]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 26 Apr 2010 14:35:18 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	刚给一个朋友解决他写的Discuz!插件的问题，说到MySQL的COUNT(*)的效率，发现越说越说不清楚，干脆写下来，分享给大家。<br/><br/>COUNT(*)与COUNT(COL)<br/>网上搜索了下，发现各种说法都有：<br/>比如认为COUNT(COL)比COUNT(*)快的；<br/>认为COUNT(*)比COUNT(COL)快的；<br/>还有朋友很搞笑的说到这个其实是看人品的。<br/><br/>在不加WHERE限制条件的情况下，COUNT(*)与COUNT(COL)基本可以认为是等价的；<br/>但是在有WHERE限制条件的情况下，COUNT(*)会比COUNT(COL)快非常多；<br/><br/>具体的数据参考如下：<br/><br/><div class="code"><br/>mysql&gt; SELECT COUNT(*) FROM cdb_posts where fid = 604;<br/>+————+<br/>&#124; COUNT(fid) &#124;<br/>+————+<br/>&#124; 79000 &#124;<br/>+————+<br/>1 row in set (0.03 sec)<br/><br/>mysql&gt; SELECT COUNT(tid) FROM cdb_posts where fid = 604;<br/>+————+<br/>&#124; COUNT(tid) &#124;<br/>+————+<br/>&#124; 79000 &#124;<br/>+————+<br/>1 row in set (0.33 sec)<br/><br/>mysql&gt; SELECT COUNT(pid) FROM cdb_posts where fid = 604;<br/>+————+<br/>&#124; COUNT(pid) &#124;<br/>+————+<br/>&#124; 79000 &#124;<br/>+————+<br/>1 row in set (0.33 sec)<br/></div><br/><br/>COUNT(*)通常是对主键进行索引扫描，而COUNT(COL)就不一定了，另外前者是统计表中的所有符合的纪录总数，而后者是计算表中所有符合的COL的纪录数。还有有区别的。<br/><br/>COUNT时的WHERE<br/>这点以前就写过，详细请看《Mysql中count(*),DISTINCT的使用方法和效率研究》：http://www.ccvita.com/156.html<br/><br/>简单说下，就是COUNT的时候，如果没有WHERE限制的话，MySQL直接返回保存有总的行数<br/>而在有WHERE限制的情况下，总是需要对MySQL进行全表遍历。<br/><br/>优化总结：<br/>1.任何情况下SELECT COUNT(*) FROM tablename是最优选择；<br/>2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询；<br/>3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] MySQL优化之COUNT(*)效率]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>