<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fred Chu &#187; MySQL</title>
	<atom:link href="http://fred.oracle1.com/weblog/category/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://fred.oracle1.com/weblog</link>
	<description>一个Web开发者的博客</description>
	<lastBuildDate>Tue, 31 Jan 2012 08:00:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MySQL regex_replace Function</title>
		<link>http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/</link>
		<comments>http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 04:03:19 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=2222</guid>
		<description><![CDATA[123456789101112131415161718192021222324252627282930&#60;pre&#62;DELIMITER $$ CREATE FUNCTION &#160;`regex_replace`&#40;pattern VARCHAR&#40;1000&#41;,replacement VARCHAR&#40;1000&#41;,original VARCHAR&#40;1000&#41;&#41; RETURNS VARCHAR&#40;1000&#41; DETERMINISTIC BEGIN &#160;DECLARE temp VARCHAR&#40;1000&#41;; &#160;DECLARE ch VARCHAR&#40;1&#41;; &#160;DECLARE i INT; &#160;SET i = 1; &#160;SET temp = ''; &#160;IF original REGEXP pattern THEN &#160; loop_label: LOOP &#160; &#160;IF i&#38;gt;CHAR_LENGTH&#40;original&#41; THEN &#160; &#160; LEAVE loop_label; &#160; &#160;END IF; &#160; &#160;SET ch = SUBSTRING&#40;original,i,1&#41;; &#160; &#160;IF [...]]]></description>
			<content:encoded><![CDATA[<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #CC0099;">&lt;</span>pre<span style="color: #CC0099;">&gt;</span>DELIMITER $$<br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=CREATE"><span style="color: #990099; font-weight: bold;">CREATE</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FUNCTION"><span style="color: #990099; font-weight: bold;">FUNCTION</span></a> &nbsp;<span style="color: #008000;">`regex<span style="color: #008080; font-weight: bold;">_</span>replace`</span><span style="color: #FF00FF;">&#40;</span>pattern <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">VARCHAR</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1000</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">,</span>replacement <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">VARCHAR</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1000</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">,</span>original <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">VARCHAR</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1000</span><span style="color: #FF00FF;">&#41;</span><span style="color: #FF00FF;">&#41;</span><br />
<br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=RETURNS"><span style="color: #990099; font-weight: bold;">RETURNS</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">VARCHAR</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1000</span><span style="color: #FF00FF;">&#41;</span><br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DETERMINISTIC"><span style="color: #990099; font-weight: bold;">DETERMINISTIC</span></a><br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=BEGIN"><span style="color: #990099; font-weight: bold;">BEGIN</span></a> <br />
&nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DECLARE"><span style="color: #990099; font-weight: bold;">DECLARE</span></a> temp <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">VARCHAR</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1000</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span><br />
&nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DECLARE"><span style="color: #990099; font-weight: bold;">DECLARE</span></a> ch <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">VARCHAR</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span><br />
&nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DECLARE"><span style="color: #990099; font-weight: bold;">DECLARE</span></a> i <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INT"><span style="color: #999900; font-weight: bold;">INT</span></a><span style="color: #000033;">;</span><br />
&nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> i <span style="color: #CC0099;">=</span> <span style="color: #008080;">1</span><span style="color: #000033;">;</span><br />
&nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> temp <span style="color: #CC0099;">=</span> <span style="color: #008000;">''</span><span style="color: #000033;">;</span><br />
&nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">IF</span></a> original <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">REGEXP</span></a> pattern <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">THEN</span></a> <br />
&nbsp; loop_label: LOOP <br />
&nbsp; &nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">IF</span></a> i<span style="color: #CC0099;">&amp;</span>gt<span style="color: #000033;">;</span><a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html"><span style="color: #000099;">CHAR_LENGTH</span></a><span style="color: #FF00FF;">&#40;</span>original<span style="color: #FF00FF;">&#41;</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">THEN</span></a><br />
&nbsp; &nbsp; LEAVE loop_label<span style="color: #000033;">;</span><br />
&nbsp; &nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">END</span></a> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">IF</span></a><span style="color: #000033;">;</span><br />
&nbsp; &nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> ch <span style="color: #CC0099;">=</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html"><span style="color: #000099;">SUBSTRING</span></a><span style="color: #FF00FF;">&#40;</span>original<span style="color: #000033;">,</span>i<span style="color: #000033;">,</span><span style="color: #008080;">1</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span><br />
&nbsp; &nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">IF</span></a> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">NOT</span></a> ch <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">REGEXP</span></a> pattern <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">THEN</span></a><br />
&nbsp; &nbsp; <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> temp <span style="color: #CC0099;">=</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html"><span style="color: #000099;">CONCAT</span></a><span style="color: #FF00FF;">&#40;</span>temp<span style="color: #000033;">,</span>ch<span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span><br />
&nbsp; &nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">ELSE</span></a><br />
&nbsp; &nbsp; <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> temp <span style="color: #CC0099;">=</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html"><span style="color: #000099;">CONCAT</span></a><span style="color: #FF00FF;">&#40;</span>temp<span style="color: #000033;">,</span>replacement<span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span><br />
&nbsp; &nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">END</span></a> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">IF</span></a><span style="color: #000033;">;</span><br />
&nbsp; &nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> i<span style="color: #CC0099;">=</span>i<span style="color: #CC0099;">+</span><span style="color: #008080;">1</span><span style="color: #000033;">;</span><br />
&nbsp; <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">END</span></a> LOOP<span style="color: #000033;">;</span><br />
&nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">ELSE</span></a><br />
&nbsp; <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> temp <span style="color: #CC0099;">=</span> original<span style="color: #000033;">;</span><br />
&nbsp;<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">END</span></a> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">IF</span></a><span style="color: #000033;">;</span><br />
&nbsp;RETURN temp<span style="color: #000033;">;</span><br />
<a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html"><span style="color: #009900;">END</span></a>$$<br />
DELIMITER <span style="color: #000033;">;</span><span style="color: #CC0099;">&lt;/</span>pre<span style="color: #CC0099;">&gt;</span></div></td></tr></tbody></table></div>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL锁表机制分析</title>
		<link>http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 06:21:34 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1948</guid>
		<description><![CDATA[为了给高并发情况下的mysql进行更好的优化，有必要了解一下mysql查询更新时的锁表机制。 一、概述 MySQL有三种锁的级别：页级、表级、行级。 MyISAM和MEMORY存储引擎采用的是表级锁（table-level locking）；BDB存储引擎采用的是页面锁（page-level locking），但也支持表级锁；InnoDB存储引擎既支持行级锁（row-level locking），也支持表级锁，但默认情况下是采用行级锁。 MySQL这3种锁的特性可大致归纳如下： 表级锁：开销小，加锁快；不会出现死锁；锁定粒度大，发生锁冲突的概率最高,并发度最低。 行级锁：开销大，加锁慢；会出现死锁；锁定粒度最小，发生锁冲突的概率最低,并发度也最高。 页面锁：开销和加锁时间界于表锁和行锁之间；会出现死锁；锁定粒度界于表锁和行锁之间，并发度一般。 二、MyISAM表锁 MyISAM存储引擎只支持表锁，是现在用得最多的存储引擎。 查询表级锁争用情况 可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺： 12345678mysql&#62;; show status like ‘table%’; +———————–+———-+ &#124; Variable_name &#124; Value &#124; +———————–+———-+ &#124; Table_locks_immediate &#124; 76939364 &#124; &#124; Table_locks_waited &#124; 305089 &#124; +———————–+———-+ 2 rows in set &#40;0.00 sec&#41; Table_locks_waited的值比较高，说明存在着较严重的表级锁争用情况。 MySQL表级锁的锁模式 MySQL的表级锁有两种模式：表共享读锁（Table Read Lock）和表独占写锁（Table WriteLock）。MyISAM在执行查询语句（SELECT）前，会自动给涉及的所有表加读锁，在执行更新操作（UPDATE、DELETE、INSERT等）前，会自动给涉及的表加写锁。所以对MyISAM表进行操作，会有以下情况： a、对MyISAM表的读操作（加读锁），不会阻塞其他进程对同一表的读请求，但会阻塞对同一表的写请求。只有当读锁释放后，才会执行其它进程的写操作。 b、对MyISAM表的写操作（加写锁），会阻塞其他进程对同一表的读和写操作，只有当写锁释放后，才会执行其它进程的读写操作。 下面通过例子来进行验证以上观点。数据表gz_phone里有二百多万数据，字段id,phone,ua,day。现在同时用多个客户端同时对该表进行操作分析。 a、当我用客户端1进行一个比较长时间的读操作时，分别用客户端2进行读和写操作： 12345678910111213141516171819202122client1: [...]]]></description>
			<content:encoded><![CDATA[<p>为了给高并发情况下的mysql进行更好的优化，有必要了解一下mysql查询更新时的锁表机制。<br />
<strong>一、概述</strong><br />
MySQL有三种锁的级别：页级、表级、行级。<br />
MyISAM和MEMORY存储引擎采用的是表级锁（table-level locking）；BDB存储引擎采用的是页面锁（page-level<br />
locking），但也支持表级锁；InnoDB存储引擎既支持行级锁（row-level locking），也支持表级锁，但默认情况下是采用行级锁。<br />
<span id="more-1948"></span><br />
MySQL这3种锁的特性可大致归纳如下：</p>
<ol>
<li>表级锁：开销小，加锁快；不会出现死锁；锁定粒度大，发生锁冲突的概率最高,并发度最低。</li>
<li>行级锁：开销大，加锁慢；会出现死锁；锁定粒度最小，发生锁冲突的概率最低,并发度也最高。</li>
<li>页面锁：开销和加锁时间界于表锁和行锁之间；会出现死锁；锁定粒度界于表锁和行锁之间，并发度一般。</li>
</ol>
<p><strong>二、MyISAM表锁</strong><br />
MyISAM存储引擎只支持表锁，是现在用得最多的存储引擎。</p>
<ol>
<li>查询表级锁争用情况<br />
可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺：</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #CC0099;">&gt;</span><span style="color: #000033;">;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SHOW"><span style="color: #990099; font-weight: bold;">show</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=STATUS"><span style="color: #990099; font-weight: bold;">status</span></a> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">like</span></a> ‘table<span style="color: #CC0099;">%</span>’<span style="color: #000033;">;</span><br />
<span style="color: #CC0099;">+</span>———————–<span style="color: #CC0099;">+</span>———<span style="color: #CC0099;">-+</span><br />
<span style="color: #CC0099;">|</span> Variable_name <span style="color: #CC0099;">|</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VALUE"><span style="color: #990099; font-weight: bold;">Value</span></a> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+</span>———————–<span style="color: #CC0099;">+</span>———<span style="color: #CC0099;">-+</span><br />
<span style="color: #CC0099;">|</span> Table_locks_immediate <span style="color: #CC0099;">|</span> <span style="color: #008080;">76939364</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> Table_locks_waited <span style="color: #CC0099;">|</span> <span style="color: #008080;">305089</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+</span>———————–<span style="color: #CC0099;">+</span>———<span style="color: #CC0099;">-+</span><br />
<span style="color: #008080;">2</span> rows <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IN"><span style="color: #990099; font-weight: bold;">in</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">set</span></a> <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.00</span> sec<span style="color: #FF00FF;">&#41;</span></div></td></tr></tbody></table></div>
<p>Table_locks_waited的值比较高，说明存在着较严重的表级锁争用情况。</li>
<li>MySQL表级锁的锁模式<br />
MySQL的表级锁有两种模式：表共享读锁（Table Read Lock）和表独占写锁（Table WriteLock）。MyISAM在执行查询语句（SELECT）前，会自动给涉及的所有表加读锁，在执行更新操作（UPDATE、DELETE、INSERT等）前，会自动给涉及的表加写锁。所以对MyISAM表进行操作，会有以下情况：
<ol>
<li>
<strong>a、</strong>对MyISAM表的读操作（加读锁），不会阻塞其他进程对同一表的读请求，但会阻塞对同一表的写请求。只有当读锁释放后，才会执行其它进程的写操作。</li>
<li><strong>b、</strong>对MyISAM表的写操作（加写锁），会阻塞其他进程对同一表的读和写操作，只有当写锁释放后，才会执行其它进程的读写操作。</li>
</ol>
<p>下面通过例子来进行验证以上观点。数据表gz_phone里有二百多万数据，字段id,phone,ua,day。现在同时用多个客户端同时对该表进行操作分析。</p>
<ol>
<li><strong>a、</strong>当我用客户端1进行一个比较长时间的读操作时，分别用客户端2进行读和写操作：</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client1:<br />
mysql&amp;gt;select count(*) from gz_phone group by ua;<br />
75508 rows in set (3 min 15.87 sec) client2:<br />
select id,phone from gz_phone limit 1000,10;<br />
+——+——-+<br />
| id | phone |<br />
+——+——-+<br />
| 1001 | 2222 |<br />
| 1002 | 2222 |<br />
| 1003 | 2222 |<br />
| 1004 | 2222 |<br />
| 1005 | 2222 |<br />
| 1006 | 2222 |<br />
| 1007 | 2222 |<br />
| 1008 | 2222 |<br />
| 1009 | 2222 |<br />
| 1010 | 2222 |<br />
+——+——-+<br />
10 rows in set (0.01 sec)<br />
mysql&amp;gt; update gz_phone set phone=’11111111111′ where id=1001;<br />
Query OK, 0 rows affected (2 min 57.88 sec)<br />
Rows matched: 1 Changed: 0 Warnings: 0</div></td></tr></tbody></table></div>
<p>说明当数据表有一个读锁时，其它进程的查询操作可以马上执行，但更新操作需等待读锁释放后才会执行。</li>
<li><strong>b、</strong>当用客户端1进行一个较长时间的更新操作时，用客户端2,3分别进行读写操作：
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client1:<br />
mysql&amp;gt; update gz_phone set phone=’11111111111′;<br />
Query OK, 1671823 rows affected (3 min 4.03 sec)<br />
Rows matched: 2212070 Changed: 1671823 Warnings: 0 client2:<br />
mysql&amp;gt; select id,phone,ua,day from gz_phone limit 10;<br />
+—-+——-+——————-+————+<br />
| id | phone | ua | day |<br />
+—-+——-+——————-+————+<br />
| 1 | 2222 | SonyEricssonK310c | 2007-12-19 |<br />
| 2 | 2222 | SonyEricssonK750c | 2007-12-19 |<br />
| 3 | 2222 | MAUI WAP Browser | 2007-12-19 |<br />
| 4 | 2222 | Nokia3108 | 2007-12-19 |<br />
| 5 | 2222 | LENOVO-I750 | 2007-12-19 |<br />
| 6 | 2222 | BIRD_D636 | 2007-12-19 |<br />
| 7 | 2222 | SonyEricssonS500c | 2007-12-19 |<br />
| 8 | 2222 | SAMSUNG-SGH-E258 | 2007-12-19 |<br />
| 9 | 2222 | NokiaN73-1 | 2007-12-19 |<br />
| 10 | 2222 | Nokia2610 | 2007-12-19 |<br />
+—-+——-+——————-+————+<br />
10 rows in set (2 min 58.56 sec) client3:<br />
mysql&amp;gt; update gz_phone set phone=’55555′ where id=1;<br />
Query OK, 1 row affected (3 min 50.16 sec)<br />
Rows matched: 1 Changed: 1 Warnings: 0</div></td></tr></tbody></table></div>
</li>
</ol>
<p>说明当数据表有一个写锁时，其它进程的读写操作都需等待读锁释放后才会执行。</li>
<li>并发插入<br />
原则上数据表有一个读锁时，其它进程无法对此表进行更新操作，但在一定条件下，MyISAM表也支持查询和插入操作的并发进行。<br />
MyISAM存储引擎有一个系统变量concurrent_insert，专门用以控制其并发插入的行为，其值分别可以为0、1或2。</p>
<ol>
<li>a、当concurrent_insert设置为0时，不允许并发插入。</li>
<li>b、当concurrent_insert设置为1时，如果MyISAM表中没有空洞（即表的中间没有被删除的行），MyISAM允许在一个进程读表的同时，另一个进程从表尾插入记录。这也是MySQL的默认设置。</li>
<li>c、当concurrent_insert设置为2时，无论MyISAM表中有没有空洞，都允许在表尾并发插入记录。</li>
</ol>
</li>
<li>4、MyISAM的锁调度<br />
由于MySQL认为写请求一般比读请求要重要，所以如果有读写请求同时进行的话，MYSQL将会优先执行写操作。这样MyISAM表在进行大量的更新操作时（特别是更新的字段中存在索引的情况下），会造成查询操作很难获得读锁，从而导致查询阻塞。<br />
我们可以通过一些设置来调节MyISAM的调度行为：
<ol>
<li>a、通过指定启动参数low-priority-updates，使MyISAM引擎默认给予读请求以优先的权利。</li>
<li>b、通过执行命令SET LOW_PRIORITY_UPDATES=1，使该连接发出的更新请求优先级降低。</li>
<li>c、通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性，降低该语句的优先级。</li>
</ol>
<p>上面3种方法都是要么更新优先，要么查询优先的方法。这里要说明的就是，不要盲目的给mysql设置为读优先，因为一些需要长时间运行的查询操作，也会使写进程“饿死”。只有根据你的实际情况，来决定设置哪种操作优先。这些方法还是没有从根本上同时解决查询和更新的问题。<br />
在一个有大数据量高并发表的mysql里，我们还可采用另一种策略来进行优化，那就是通过mysql主从（读写）分离来实现负载均衡，这样可避免优先哪一种操作从而可能导致另一种操作的堵塞。下面将用一个篇幅来说明mysql的读写分离技术。</li>
</ol>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: configure MySQL’s my.cnf file</title>
		<link>http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 02:07:37 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1919</guid>
		<description><![CDATA[12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061[mysqld] user=mysql bind-address=127.0.0.1 datadir=/var/lib/mysql pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysql/mysql.sock port=3306 tmpdir=/tmp language=/usr/share/mysql/english skip-external-locking query_cache_limit=64M query_cache_size=32M query_cache_type=1 max_connections=15 max_user_connections=300 interactive_timeout=100 wait_timeout=100 connect_timeout=10 thread_stack=128K thread_cache_size=128 myisam-recover=BACKUP key_buffer=64M join_buffer=1M max_allowed_packet=32M table_cache=512M sort_buffer_size=1M read_buffer_size=1M read_rnd_buffer_size=768K max_connect_errors=10 thread_concurrency=4 myisam_sort_buffer_size=32M skip-locking skip-bdb expire_logs_days=10 max_binlog_size=100M server-id=1 [mysql.server] user=mysql basedir=/usr [safe_mysqld] bind-address=127.0.0.1 err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid open_files_limit=8192 SAFE_MYSQLD_OPTIONS=”–defaults-file=/etc/my.cnf –log-slow-queries=/var/log/slow-queries.log” [mysql] [isamchk] key_buffer=64M sort_buffer=64M read_buffer=16M write_buffer=16M [myisamchk] key_buffer=64M sort_buffer=64M [...]]]></description>
			<content:encoded><![CDATA[<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[mysqld]<br />
user=mysql<br />
bind-address=127.0.0.1<br />
datadir=/var/lib/mysql<br />
pid-file=/var/run/mysqld/mysqld.pid<br />
socket=/var/run/mysql/mysql.sock<br />
port=3306<br />
tmpdir=/tmp<br />
language=/usr/share/mysql/english<br />
skip-external-locking<br />
query_cache_limit=64M<br />
query_cache_size=32M<br />
query_cache_type=1<br />
max_connections=15<br />
max_user_connections=300<br />
interactive_timeout=100<br />
wait_timeout=100<br />
connect_timeout=10<br />
thread_stack=128K<br />
thread_cache_size=128<br />
myisam-recover=BACKUP<br />
key_buffer=64M<br />
join_buffer=1M<br />
max_allowed_packet=32M<br />
table_cache=512M<br />
sort_buffer_size=1M<br />
read_buffer_size=1M<br />
read_rnd_buffer_size=768K<br />
max_connect_errors=10<br />
thread_concurrency=4<br />
myisam_sort_buffer_size=32M<br />
skip-locking<br />
skip-bdb<br />
expire_logs_days=10<br />
max_binlog_size=100M<br />
server-id=1<br />
[mysql.server]<br />
user=mysql<br />
basedir=/usr<br />
[safe_mysqld]<br />
bind-address=127.0.0.1<br />
err-log=/var/log/mysqld.log<br />
pid-file=/var/run/mysqld/mysqld.pid<br />
open_files_limit=8192<br />
SAFE_MYSQLD_OPTIONS=”–defaults-file=/etc/my.cnf –log-slow-queries=/var/log/slow-queries.log”<br />
[mysql]<br />
[isamchk]<br />
key_buffer=64M<br />
sort_buffer=64M<br />
read_buffer=16M<br />
write_buffer=16M<br />
[myisamchk]<br />
key_buffer=64M<br />
sort_buffer=64M<br />
read_buffer=16M<br />
write_buffer=16M<br />
[mysqlhotcopy]<br />
interactive-timeout<br />
max_heap_table_size = 64 M<br />
tmp_table_size = 64 M<br />
!includedir /etc/mysql/conf.d/</div></td></tr></tbody></table></div>
<p><span id="more-1919"></span></p>
<p>I’ve gone back and forth over the years configuring <a href="http://dev.mysql.com/">MySQL</a> for optimal performance, and while I know I’m not there, I now have a new baseline to build from. From a post called <a href="http://nakuls77.wordpress.com/2008/09/14/standard-mysql-mycnf-configuration/">Standard MYSQL my.cnf configuration</a>, you can see all the base information, but also things like:</p>
<pre> key_buffer=256M # 64M for 1GB, 128M for 2GB, 256 for 4GB</pre>
<p>Which defines the value (256M) but then spells out ideal base values for you to start with if you have more RAM on your system. This is very helpful, I’m tried to go a step further by combining it with<a href="http://debian.org/">Debian’s</a> default my.cnf that comes on 5.0 (lenny) for MySQL 5. As I’m always open for suggestions for improvements, please comment if you have a different view on these choices, thanks. Here it is:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[client]<br />
socket=/var/run/mysqld/mysqld.sock<br />
port=3306<br />
<br />
[mysqld_safe]<br />
socket=/var/run/mysqld/mysqld.sock<br />
nice=0<br />
<br />
[mysqld]<br />
user=mysql<br />
bind-address=127.0.0.1<br />
datadir=/var/lib/mysql<br />
pid-file=/var/run/mysqld/mysqld.pid<br />
socket=/var/run/mysql/mysql.sock<br />
port=3306<br />
tmpdir=/tmp<br />
language=/usr/share/mysql/english<br />
skip-external-locking<br />
query_cache_limit=1M<br />
query_cache_size=32M<br />
query_cache_type=1<br />
max_connections=3000<br />
max_user_connections=600<br />
interactive_timeout=100<br />
wait_timeout=100<br />
connect_timeout=10<br />
thread_stack=128K<br />
thread_cache_size=128<br />
myisam-recover=BACKUP<br />
#key_buffer - 64M for 1GB, 128M for 2GB, 256 for 4GB<br />
key_buffer=64M<br />
#join_buffer_size - 1M for 1GB, 2M for 2GB, 4M for 4GB<br />
join_buffer=1M<br />
max_allowed_packet=32M<br />
table_cache=1024<br />
#sort_buffer_size - 1M for 1GB, 2M for 2GB, 4M for 4GB<br />
sort_buffer_size=1M<br />
#read_buffer_size - 1M for 1GB, 2M for 2GB, 4M for 4GB<br />
read_buffer_size=1M<br />
#read_rnd_buffer_size - 768K for 1GB, 1536K for 2GB, 3072K for 4GB<br />
read_rnd_buffer_size=768K<br />
max_connect_errors=10<br />
thread_concurrency=4<br />
#myisam_sort_buffer_size - 32M for 1GB, 64M for 2GB, 128 for 4GB<br />
myisam_sort_buffer_size=32M<br />
skip-locking<br />
skip-bdb<br />
expire_logs_days=10<br />
max_binlog_size=100M<br />
server-id=1<br />
<br />
[mysql.server]<br />
user=mysql<br />
basedir=/usr<br />
<br />
[safe_mysqld]<br />
bind-address=127.0.0.1<br />
err-log=/var/log/mysqld.log<br />
pid-file=/var/run/mysqld/mysqld.pid<br />
open_files_limit=8192<br />
SAFE_MYSQLD_OPTIONS=”–defaults-file=/etc/my.cnf –log-slow-queries=/var/log/slow-queries.log”<br />
<br />
#[mysqldump]<br />
#quick<br />
#quote-names<br />
#max_allowed_packet=16M<br />
<br />
[mysql]<br />
#no-auto-rehash # faster start of mysql but no tab completition<br />
<br />
[isamchk]<br />
#key_buffer - 64M for 1GB, 128M for 2GB, 256M for 4GB<br />
key_buffer=64M<br />
#sort_buffer - 64M for 1GB, 128M for 2GB, 256M for 4GB<br />
sort_buffer=64M<br />
#read_buffer - 16M for 1GB, 32M for 2GB, 64M for 4GB<br />
read_buffer=16M<br />
#write_buffer - 16M for 1GB, 32M for 2GB, 64M for 4GB<br />
write_buffer=16M<br />
<br />
[myisamchk]<br />
#key_buffer - 64M for 1GB, 128M for 2GB, 256M for 4GB<br />
key_buffer=64M<br />
#sort_buffer - 64M for 1GB, 128M for 2GB, 256M for 4GB<br />
sort_buffer=64M<br />
#read_buffer - 16M for 1GB, 32M for 2GB, 64M for 4GB<br />
read_buffer=16M<br />
#write_buffer - 16M for 1GB, 32M for 2GB, 64M for 4GB<br />
write_buffer=16M<br />
<br />
[mysqlhotcopy]<br />
interactive-timeout<br />
<br />
!includedir /etc/mysql/conf.d/</div></td></tr></tbody></table></div>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化21 &#8211; 使用随机函数产生采样</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:37:30 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1917</guid>
		<description><![CDATA[RAND() 函数是 MySQL 提供的产生随机数的函数。没有指定参数时，每次执行会返回 0-1 的浮点数： 12345678910111213141516171819mysql&#62; select rand(); +------------------+ &#124; rand() &#124; +------------------+ &#124; 0.56110724207117 &#124; +------------------+ 1 row in set (0.02 sec) mysql&#62; select rand(); +-----------------+ &#124; rand() &#124; +-----------------+ &#124; 0.3343874880433 &#124; +-----------------+ 1 row in set (0.00 sec) 有些时候，我们需要在统计操作的时候进行随机的采样，可以使用 ORDER BY RAND() 按照随机顺序检索数据行，如下： 12345678910mysql&#62; select * from employee order by rand(); [...]]]></description>
			<content:encoded><![CDATA[<p>RAND() 函数是 MySQL 提供的产生随机数的函数。没有指定参数时，每次执行会返回 0-1 的浮点数：</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql&gt; select rand();<br />
<br />
+------------------+<br />
| rand() |<br />
+------------------+<br />
| 0.56110724207117 |<br />
+------------------+<br />
<br />
1 row in set (0.02 sec)<br />
<br />
mysql&gt; select rand();<br />
<br />
+-----------------+<br />
| rand() |<br />
+-----------------+<br />
| 0.3343874880433 |<br />
+-----------------+<br />
<br />
1 row in set (0.00 sec)</div></td></tr></tbody></table></div>
<p><span id="more-1917"></span><br />
有些时候，我们需要在统计操作的时候进行随机的采样，可以使用 ORDER BY RAND() 按照随机顺序检索数据行，如下：</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql&gt; select * from employee order by rand();<br />
<br />
+------+--------+------+------+------+<br />
| id | name | dep | pos | sal |<br />
+------+--------+------+------+------+<br />
| 4 | cathey | 02 | 02 | 3000 |<br />
| 10 | sun | 02 | 02 | 1900 |<br />
| 6 | lily | 03 | 02 | 2200 |<br />
| 3 | micro | 02 | 01 | 1500 |<br />
......</div></td></tr></tbody></table></div>
<p>ORDER BY RAND() 同 LIMIT 的结合可以从一组列中选择随机样本，下面的例子就是使用 ORDER BY RAND() LIMIT 从雇员表随机获得 6 个样本的方法：</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql&gt; select * from employee order by rand() limit 6;<br />
<br />
+------+--------+------+------+------+<br />
| id | name | dep | pos | sal |<br />
+------+--------+------+------+------+<br />
| 4 | cathey | 02 | 02 | 3000 |<br />
| 5 | amy | 03 | 01 | 2500 |<br />
| 2 | eefs | 01 | 02 | 2000 |<br />
| 3 | micro | 02 | 01 | 1500 |<br />
| 10 | sun | 02 | 02 | 1900 |<br />
| 1 | abcd | 01 | 01 | 1000 |<br />
+------+--------+------+------+------+<br />
<br />
6 rows in set (0.00 sec)</div></td></tr></tbody></table></div>
<p>随机抽取样本对总体的统计具有十分重要的意义，这个函数在进行统计操作的时候非常有用。</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化20 &#8211; ORDER BY 操作的优化</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:35:14 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1915</guid>
		<description><![CDATA[在某些情况中， MySQL 可以使用一个索引来满足 ORDER BY 子句，而不需要额外的排序。 where 条件和 order by 使用相同的索引，并且 order by 的顺序和索引顺序相同，并且 order by 的字段都是升序或者都是降序。 例如：下列 sql 可以使用索引。 12345SELECT * FROM t1 ORDER BY key_part1,key_part2,... ; SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; 但是以下情况不使用索引： 1SELECT * FROM t1 [...]]]></description>
			<content:encoded><![CDATA[<p>在某些情况中， MySQL 可以使用一个索引来满足 ORDER BY 子句，而不需要额外的排序。 where 条件和 order by 使用相同的索引，并且 order by 的顺序和索引顺序相同，并且 order by 的字段都是升序或者都是降序。</p>
<p>例如：下列 sql 可以使用索引。</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">SELECT</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">FROM</span></a> t1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> key_part1<span style="color: #000033;">,</span>key_part2<span style="color: #000033;">,</span>... <span style="color: #000033;">;</span><br />
<br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">SELECT</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">FROM</span></a> t1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=WHERE"><span style="color: #990099; font-weight: bold;">WHERE</span></a> key_part1<span style="color: #CC0099;">=</span><span style="color: #008080;">1</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> key_part1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">DESC</span></a><span style="color: #000033;">,</span> key_part2 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">DESC</span></a><span style="color: #000033;">;</span><br />
<br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">SELECT</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">FROM</span></a> t1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> key_part1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">DESC</span></a><span style="color: #000033;">,</span> key_part2 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">DESC</span></a><span style="color: #000033;">;</span></div></td></tr></tbody></table></div>
<p>但是以下情况不使用索引：</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">SELECT</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">FROM</span></a> t1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> key_part1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">DESC</span></a><span style="color: #000033;">,</span> key_part2 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ASC"><span style="color: #990099; font-weight: bold;">ASC</span></a> ；</div></td></tr></tbody></table></div>
<p>&#8211;order by 的字段混合 ASC 和 DESC</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">SELECT</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">FROM</span></a> t1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=WHERE"><span style="color: #990099; font-weight: bold;">WHERE</span></a> key2<span style="color: #CC0099;">=</span>constant <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> key1 ；</div></td></tr></tbody></table></div>
<p>&#8211; 用于查询行的关键字与 ORDER BY 中所使用的不相同</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">SELECT</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">FROM</span></a> t1 <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> key1<span style="color: #000033;">,</span> key2 ；</div></td></tr></tbody></table></div>
<p>&#8211; 对不同的关键字使用 ORDER BY 。</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化19 &#8211; GROUP BY 操作的优化</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:33:33 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1912</guid>
		<description><![CDATA[默认情况下， MySQL 在执行 GROUP BY col1 ， col2.... 操作的时候，会按照 GROUP BY 字段的顺序进行排序。如果显式包括一个包含相同的列的 ORDER BY 子句，则对 MySQL 的实际执行性能没有什么额外的影响。 如果查询包括 GROUP BY 操作， 但是不需要对结果进行排序，或者对默认的排序结果不满意，希望获得结果后再由程序进一步处理的时候，可以指定 ORDER BY NULL 禁止排序，从而避免排序结果的消耗。 下面介绍的例子对比了开启 / 关闭 GROUP BY 排序的执行计划： 1234567891011121314151617181920212223242526272829mysql&#62; desc select dep,pos,avg&#40;sal&#41; from employee group by dep,pos \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employee type: ALL possible_keys: [...]]]></description>
			<content:encoded><![CDATA[<p>默认情况下， MySQL 在执行 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">GROUP BY</span></a> col1 ， col2....</span></code> 操作的时候，会按照 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">GROUP BY</span></a></span></code> 字段的顺序进行排序。如果显式包括一个包含相同的列的 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a></span></code> 子句，则对 MySQL 的实际执行性能没有什么额外的影响。</p>
<p>如果查询包括 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">GROUP BY</span></a></span></code> 操作， 但是不需要对结果进行排序，或者对默认的排序结果不满意，希望获得结果后再由程序进一步处理的时候，可以指定 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">ORDER BY</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a></span></code> 禁止排序，从而避免排序结果的消耗。<span id="more-1912"></span></p>
<p>下面介绍的例子对比了开启 / 关闭 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">GROUP BY</span></a></span></code> 排序的执行计划：</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #CC0099;">&gt;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">desc</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">select</span></a> dep<span style="color: #000033;">,</span>pos<span style="color: #000033;">,</span><a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html"><span style="color: #000099;">avg</span></a><span style="color: #FF00FF;">&#40;</span>sal<span style="color: #FF00FF;">&#41;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">from</span></a> employee <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">group by</span></a> dep<span style="color: #000033;">,</span>pos \G<br />
<br />
<span style="color: #CC0099;">***************************</span> <span style="color: #008080;">1</span>. row <span style="color: #CC0099;">***************************</span><br />
id: <span style="color: #008080;">1</span><br />
select_type: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SIMPLE"><span style="color: #990099; font-weight: bold;">SIMPLE</span></a><br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TABLE"><span style="color: #990099; font-weight: bold;">table</span></a>: employee<br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TYPE"><span style="color: #990099; font-weight: bold;">type</span></a>: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ALL"><span style="color: #990099; font-weight: bold;">ALL</span></a><br />
possible_keys: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=KEY"><span style="color: #990099; font-weight: bold;">key</span></a>: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
key_len: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
ref: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
rows: <span style="color: #008080;">10</span><br />
Extra: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=USING"><span style="color: #990099; font-weight: bold;">Using</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TEMPORARY"><span style="color: #990099; font-weight: bold;">temporary</span></a><span style="color: #000033;">;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=USING"><span style="color: #990099; font-weight: bold;">Using</span></a> filesort<br />
<span style="color: #008080;">1</span> row <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IN"><span style="color: #990099; font-weight: bold;">in</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">set</span></a> <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.00</span> sec<span style="color: #FF00FF;">&#41;</span><br />
<br />
mysql<span style="color: #CC0099;">&gt;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DESC"><span style="color: #990099; font-weight: bold;">desc</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">select</span></a> dep<span style="color: #000033;">,</span>pos<span style="color: #000033;">,</span><a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html"><span style="color: #000099;">avg</span></a><span style="color: #FF00FF;">&#40;</span>sal<span style="color: #FF00FF;">&#41;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">from</span></a> employee <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">group by</span></a> dep<span style="color: #000033;">,</span>pos <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ORDER%20BY"><span style="color: #990099; font-weight: bold;">order by</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">null</span></a> \G<br />
<span style="color: #CC0099;">***************************</span> <span style="color: #008080;">1</span>. row <span style="color: #CC0099;">***************************</span><br />
id: <span style="color: #008080;">1</span><br />
select_type: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SIMPLE"><span style="color: #990099; font-weight: bold;">SIMPLE</span></a><br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TABLE"><span style="color: #990099; font-weight: bold;">table</span></a>: employee<br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TYPE"><span style="color: #990099; font-weight: bold;">type</span></a>: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ALL"><span style="color: #990099; font-weight: bold;">ALL</span></a><br />
possible_keys: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=KEY"><span style="color: #990099; font-weight: bold;">key</span></a>: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
key_len: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
ref: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><br />
rows: <span style="color: #008080;">10</span><br />
Extra: <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=USING"><span style="color: #990099; font-weight: bold;">Using</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TEMPORARY"><span style="color: #990099; font-weight: bold;">temporary</span></a><br />
<br />
<span style="color: #008080;">1</span> row <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IN"><span style="color: #990099; font-weight: bold;">in</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">set</span></a> <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.00</span> sec<span style="color: #FF00FF;">&#41;</span></div></td></tr></tbody></table></div>
<p>从执行计划可以看到，使用了 ORDER BY NULL 的 SQL 减少了文件排序的步骤，当返回结果集很大时，对于 GROUP BY 的性能是有很大改善的。</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:31:20 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1910</guid>
		<description><![CDATA[使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息，它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息，还能检索出本组类的整体聚合信息。 下面我们的例子对比了普通的 GROUP BY 操作和有 WITH ROLLUP 子句的 GROUP BY 操作的不同： 查询表的内容，是雇员的基础信息表： 123456789101112131415161718mysql&#62; select * from employee; +------+--------+------+------+------+ &#124; id &#124; name &#124; dep &#124; pos &#124; sal &#124; +------+--------+------+------+------+ &#124; 1 &#124; abcd &#124; 01 &#124; 01 &#124; 1000 &#124; &#124; 2 &#124; eefs &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息，它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息，还能检索出本组类的整体聚合信息。<span id="more-1910"></span></p>
<p>下面我们的例子对比了普通的 GROUP BY 操作和有 WITH ROLLUP 子句的 GROUP BY 操作的不同：</p>
<p>查询表的内容，是雇员的基础信息表：</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #CC0099;">&gt;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">select</span></a> <span style="color: #CC0099;">*</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">from</span></a> employee<span style="color: #000033;">;</span><br />
<br />
<span style="color: #CC0099;">+------+--------+------+------+------+</span><br />
<span style="color: #CC0099;">|</span> id <span style="color: #CC0099;">|</span> name <span style="color: #CC0099;">|</span> dep <span style="color: #CC0099;">|</span> pos <span style="color: #CC0099;">|</span> sal <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+------+--------+------+------+------+</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">1</span> <span style="color: #CC0099;">|</span> abcd <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">2</span> <span style="color: #CC0099;">|</span> eefs <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">3</span> <span style="color: #CC0099;">|</span> micro <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1500</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">4</span> <span style="color: #CC0099;">|</span> cathey <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">3000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">5</span> <span style="color: #CC0099;">|</span> amy <span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2500</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">6</span> <span style="color: #CC0099;">|</span> lily <span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2200</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">7</span> <span style="color: #CC0099;">|</span> bobo <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">8</span> <span style="color: #CC0099;">|</span> gray <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1900</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">9</span> <span style="color: #CC0099;">|</span> leon <span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2900</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">10</span> <span style="color: #CC0099;">|</span> sun <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1900</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+------+--------+------+------+------+</span><br />
<br />
<span style="color: #008080;">10</span> rows <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IN"><span style="color: #990099; font-weight: bold;">in</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">set</span></a> <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.00</span> sec<span style="color: #FF00FF;">&#41;</span></div></td></tr></tbody></table></div>
<p>普通的 GROUP BY 操作，可以按照部门和职位进行分组，计算每个部门，每个职位的工资平均值：</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #CC0099;">&gt;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">select</span></a> dep<span style="color: #000033;">,</span>pos<span style="color: #000033;">,</span><a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html"><span style="color: #000099;">avg</span></a><span style="color: #FF00FF;">&#40;</span>sal<span style="color: #FF00FF;">&#41;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">from</span></a> employee <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">group by</span></a> dep<span style="color: #000033;">,</span>pos<span style="color: #000033;">;</span><br />
<br />
<span style="color: #CC0099;">+------+------+-----------+</span><br />
<span style="color: #CC0099;">|</span> dep <span style="color: #CC0099;">|</span> pos <span style="color: #CC0099;">|</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html"><span style="color: #000099;">avg</span></a><span style="color: #FF00FF;">&#40;</span>sal<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+------+------+-----------+</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1500.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1950.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1500.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2450.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2500.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2550.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+------+------+-----------+</span><br />
<br />
<span style="color: #008080;">6</span> rows <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IN"><span style="color: #990099; font-weight: bold;">in</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">set</span></a> <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.02</span> sec<span style="color: #FF00FF;">&#41;</span></div></td></tr></tbody></table></div>
<p>如果我们希望再显示部门的平均值和全部雇员的平均值，普通的 GROUP BY 语句是不能实现的，需要另外执行一个查询操作，或者通过程序来计算。如果使用有 WITH ROLLUP 子句的 GROUP BY 语句，则可以轻松实现这个要求：</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #CC0099;">&gt;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SELECT"><span style="color: #990099; font-weight: bold;">select</span></a> dep<span style="color: #000033;">,</span>pos<span style="color: #000033;">,</span><a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html"><span style="color: #000099;">avg</span></a><span style="color: #FF00FF;">&#40;</span>sal<span style="color: #FF00FF;">&#41;</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=FROM"><span style="color: #990099; font-weight: bold;">from</span></a> employee <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=GROUP%20BY"><span style="color: #990099; font-weight: bold;">group by</span></a> dep<span style="color: #000033;">,</span>pos <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=WITH%20ROLLUP"><span style="color: #990099; font-weight: bold;">with rollup</span></a><span style="color: #000033;">;</span><br />
<br />
<span style="color: #CC0099;">+------+------+-----------+</span><br />
<span style="color: #CC0099;">|</span> dep <span style="color: #CC0099;">|</span> pos <span style="color: #CC0099;">|</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html"><span style="color: #000099;">avg</span></a><span style="color: #FF00FF;">&#40;</span>sal<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+------+------+-----------+</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1500.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1950.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1725.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">1500.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2450.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2133.3333</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">01</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2500.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">02</span> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2550.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <span style="color: #008080;">03</span> <span style="color: #CC0099;">|</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2533.3333</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">|</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a> <span style="color: #CC0099;">|</span> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a> <span style="color: #CC0099;">|</span> <span style="color: #008080;">2090.0000</span> <span style="color: #CC0099;">|</span><br />
<span style="color: #CC0099;">+------+------+-----------+</span><br />
<br />
<span style="color: #008080;">10</span> rows <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IN"><span style="color: #990099; font-weight: bold;">in</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">set</span></a> <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.00</span> sec<span style="color: #FF00FF;">&#41;</span></div></td></tr></tbody></table></div>
<p>需要注意的是，使用有 WITH ROLLUP 子句的 GROUP BY 语句时，不能再使用 ORDER BY 语句对结果集进行排序，如果对返回的结果顺序不满意，需要应用程序获得结果后在程序中进行排序。</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化17 &#8211; INSERT操作的优化</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:28:31 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1908</guid>
		<description><![CDATA[执行 INSERT 操作的时候，可以考虑使用以下的方式优化 SQL 的执行效率： 如果你同时从同一客户插入很多行，使用多个值表的 INSERT 语句。这比使用分开 INSERT 语句快。 1Insert into test values&#40;1,2&#41;,&#40;1,3&#41;,&#40;1,4&#41; … 如果你从不同客户插入很多行，能通过使用 INSERT DELAYED 语句得到更高的速度。 Delayed的含义是让 INSERT 语句马上执行，其实数据都被放在内存的队列中，并没有真正写入磁盘；这比每条语句分别插入要快的多； LOW_PRIORITY 刚好相反，在所有其他用户对表的读写完后才进行插入； 将索引文件和数据文件分在不同的磁盘上存放； 如果进行批量插入，可以增加 bulk_insert_buffer_size 变量值的方法来提高速度，但是，这只能对 MyISAM 表使用； 当从一个文本文件装载一个表时，使用 LOAD DATA INFILE。这通常比使用很多 INSERT 语句快 20 倍； 根据应用情况使用 REPLACE 语句代替 INSERT ； 根据应用情况使用 IGNORE 关键字忽略重复记录。 Related PostsJanuary 18, 2012 -- MySQL regex_replace FunctionJune 9, 2011 -- 一天总结September 13, 2010 -- MySQL锁表机制分析September 9, 2010 -- [...]]]></description>
			<content:encoded><![CDATA[<p>执行<code class="codecolorer mysql default"><span class="mysql"> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INSERT"><span style="color: #990099; font-weight: bold;">INSERT</span></a></span></code> 操作的时候，可以考虑使用以下的方式优化 SQL 的执行效率：</p>
<ul>
<li> 如果你同时从同一客户插入很多行，使用多个值表的 INSERT 语句。这比使用分开 INSERT 语句快。
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INSERT"><span style="color: #990099; font-weight: bold;">Insert</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INTO"><span style="color: #990099; font-weight: bold;">into</span></a> test <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VALUES"><span style="color: #990099; font-weight: bold;">values</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1</span><span style="color: #000033;">,</span><span style="color: #008080;">2</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">,</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1</span><span style="color: #000033;">,</span><span style="color: #008080;">3</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">,</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">1</span><span style="color: #000033;">,</span><span style="color: #008080;">4</span><span style="color: #FF00FF;">&#41;</span> …</div></td></tr></tbody></table></div>
</li>
</ul>
<ul>
<li> 如果你从不同客户插入很多行，能通过使用 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INSERT"><span style="color: #990099; font-weight: bold;">INSERT</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DELAYED"><span style="color: #990099; font-weight: bold;">DELAYED</span></a></span></code> 语句得到更高的速度。<code class="codecolorer mysql default"><span class="mysql"> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DELAYED"><span style="color: #990099; font-weight: bold;">Delayed</span></a></span></code>的含义是让 INSERT 语句马上执行，其实数据都被放在内存的队列中，并没有真正写入磁盘；这比每条语句分别插入要快的多； <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=LOW_PRIORITY"><span style="color: #990099; font-weight: bold;">LOW_PRIORITY</span></a></span></code> 刚好相反，在所有其他用户对表的读写完后才进行插入；</li>
<li> 将索引文件和数据文件分在不同的磁盘上存放；</li>
<li> 如果进行批量插入，可以增加 bulk_insert_buffer_size 变量值的方法来提高速度，但是，这只能对 MyISAM 表使用；</li>
<li> 当从一个文本文件装载一个表时，使用<code class="codecolorer mysql default"><span class="mysql"> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=LOAD"><span style="color: #990099; font-weight: bold;">LOAD</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DATA"><span style="color: #990099; font-weight: bold;">DATA</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INFILE"><span style="color: #990099; font-weight: bold;">INFILE</span></a></span></code>。这通常比使用很多 INSERT 语句快 20 倍；</li>
<li> 根据应用情况使用 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=REPLACE"><span style="color: #990099; font-weight: bold;">REPLACE</span></a></span></code> 语句代替<code class="codecolorer mysql default"><span class="mysql"> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INSERT"><span style="color: #990099; font-weight: bold;">INSERT</span></a></span></code> ；</li>
<li> 根据应用情况使用 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=IGNORE"><span style="color: #990099; font-weight: bold;">IGNORE</span></a></span></code> 关键字忽略重复记录。</li>
</ul>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化16 &#8211; InnoDB 存储引擎</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:26:44 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[InnoDB]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1906</guid>
		<description><![CDATA[对于 InnoDB 类型的表，这种方式并不能提高导入数据的效率。对于 InnoDB 类型的表，我们有以下几种方式可以提高导入的效率： 因为 InnoDB 类型的表是按照主键的顺序保存的，所以将导入的数据按照主键的顺序排列，可以有效的提高导入数据的效率。如果 InnoDB 表没有主键，那么系统会默认创建一个内部列作为主键，所以如果可以给表创建一个主键，将可以利用这个优势提高导入数据的效率。 在导入数据前执行&#160;SET UNIQUE_CHECKS=0 ，关闭唯一性校验，在导入结束后执行 SET UNIQUE_CHECKS=1 ，恢复唯一性校验，可以提高导入的效率。 如果应用使用自动提交的方式，建议在导入前执行 SET AUTOCOMMIT=0 ，关闭自动提交，导入结束后再执行 SET AUTOCOMMIT=1，打开自动提交，也可以提高导入的效率。 Related PostsJanuary 18, 2012 -- MySQL regex_replace FunctionJune 9, 2011 -- 一天总结September 13, 2010 -- MySQL锁表机制分析September 9, 2010 -- HOWTO: configure MySQL’s my.cnf fileSeptember 8, 2010 -- MySQL性能优化21 &#8211; 使用随机函数产生采样September 8, 2010 -- MySQL性能优化20 &#8211; ORDER BY [...]]]></description>
			<content:encoded><![CDATA[<p>对于 InnoDB 类型的表，这种方式并不能提高导入数据的效率。对于 InnoDB 类型的表，我们有以下几种方式可以提高导入的效率：</p>
<p>因为 InnoDB 类型的表是按照主键的顺序保存的，所以将导入的数据按照主键的顺序排列，可以有效的提高导入数据的效率。如果 InnoDB 表没有主键，那么系统会默认创建一个内部列作为主键，所以如果可以给表创建一个主键，将可以利用这个优势提高导入数据的效率。</p>
<p>在导入数据前执行<code class="codecolorer mysql default"><span class="mysql">&nbsp;<a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> UNIQUE_CHECKS<span style="color: #CC0099;">=</span><span style="color: #008080;">0</span></span></code> ，关闭唯一性校验，在导入结束后执行 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> UNIQUE_CHECKS<span style="color: #CC0099;">=</span><span style="color: #008080;">1</span></span></code> ，恢复唯一性校验，可以提高导入的效率。</p>
<p>如果应用使用自动提交的方式，建议在导入前执行 <code class="codecolorer mysql default"><span class="mysql"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> AUTOCOMMIT<span style="color: #CC0099;">=</span><span style="color: #008080;">0</span></span></code> ，关闭自动提交，导入结束后再执行<code class="codecolorer mysql default"><span class="mysql"> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SET"><span style="color: #990099; font-weight: bold;">SET</span></a> AUTOCOMMIT<span style="color: #CC0099;">=</span><span style="color: #008080;">1</span></span></code>，打开自动提交，也可以提高导入的效率。</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化15 &#8211; MyISAM 存储引擎">MySQL性能优化15 &#8211; MyISAM 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL性能优化15 &#8211; MyISAM 存储引擎</title>
		<link>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/</link>
		<comments>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 09:25:16 +0000</pubDate>
		<dc:creator>Fred</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MyISAM]]></category>

		<guid isPermaLink="false">http://fred.oracle1.com/weblog/?p=1904</guid>
		<description><![CDATA[对于 MyISAM 类型的表，可以通过以下方式快速的导入大量的数据。 1ALTER TABLE tblname DISABLE KEYS; loading the data 1ALTER TABLE tblname ENABLE KEYS; 这两个命令用来打开或者关闭 MyISAM 表非唯一索引的更新。在导入大量的数据到一个非空的 MyISAM 表时，通过设置这两个命令，可以提高导入的效率。对于导入大量数据到一个空的 MyISAM 表，默认就是先导入数据然后才创建索引的，所以不用进行设置。 Related PostsJanuary 18, 2012 -- MySQL regex_replace FunctionJune 9, 2011 -- 一天总结September 13, 2010 -- MySQL锁表机制分析September 9, 2010 -- HOWTO: configure MySQL’s my.cnf fileSeptember 8, 2010 -- MySQL性能优化21 &#8211; 使用随机函数产生采样September 8, 2010 [...]]]></description>
			<content:encoded><![CDATA[<p>对于 MyISAM 类型的表，可以通过以下方式快速的导入大量的数据。</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ALTER"><span style="color: #990099; font-weight: bold;">ALTER</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TABLE"><span style="color: #990099; font-weight: bold;">TABLE</span></a> tblname <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=DISABLE"><span style="color: #990099; font-weight: bold;">DISABLE</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=KEYS"><span style="color: #990099; font-weight: bold;">KEYS</span></a><span style="color: #000033;">;</span></div></td></tr></tbody></table></div>
<p>loading the data</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ALTER"><span style="color: #990099; font-weight: bold;">ALTER</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TABLE"><span style="color: #990099; font-weight: bold;">TABLE</span></a> tblname <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=ENABLE"><span style="color: #990099; font-weight: bold;">ENABLE</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=KEYS"><span style="color: #990099; font-weight: bold;">KEYS</span></a><span style="color: #000033;">;</span></div></td></tr></tbody></table></div>
<p>这两个命令用来打开或者关闭 MyISAM 表非唯一索引的更新。在导入大量的数据到一个非空的 MyISAM 表时，通过设置这两个命令，可以提高导入的效率。对于导入大量数据到一个空的 MyISAM 表，默认就是先导入数据然后才创建索引的，所以不用进行设置。</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li>January 18, 2012 -- <a href="http://fred.oracle1.com/weblog/2012/01/18/mysql-regex_replace-function/" title="MySQL regex_replace Function">MySQL regex_replace Function</a></li><li>June 9, 2011 -- <a href="http://fred.oracle1.com/weblog/2011/06/09/%e4%b8%80%e5%a4%a9%e6%80%bb%e7%bb%93/" title="一天总结">一天总结</a></li><li>September 13, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/13/mysql%e9%94%81%e8%a1%a8%e6%9c%ba%e5%88%b6%e5%88%86%e6%9e%90/" title="MySQL锁表机制分析">MySQL锁表机制分析</a></li><li>September 9, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/09/howto-configure-mysql%e2%80%99s-my-cnf-file/" title="HOWTO: configure MySQL’s my.cnf file">HOWTO: configure MySQL’s my.cnf file</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9621-%e4%bd%bf%e7%94%a8%e9%9a%8f%e6%9c%ba%e5%87%bd%e6%95%b0%e4%ba%a7%e7%94%9f%e9%87%87%e6%a0%b7/" title="MySQL性能优化21 &#8211; 使用随机函数产生采样">MySQL性能优化21 &#8211; 使用随机函数产生采样</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9620-order-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化20 &#8211; ORDER BY 操作的优化">MySQL性能优化20 &#8211; ORDER BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9619-group-by-%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化19 &#8211; GROUP BY 操作的优化">MySQL性能优化19 &#8211; GROUP BY 操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9618-%e4%bd%bf%e7%94%a8-group-by-with-rollup-%e6%94%b9%e5%96%84%e7%bb%9f%e8%ae%a1%e6%80%a7%e8%83%bd/" title="MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能">MySQL性能优化18 &#8211; 使用 GROUP BY WITH ROLLUP 改善统计性能</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9617-insert%e6%93%8d%e4%bd%9c%e7%9a%84%e4%bc%98%e5%8c%96/" title="MySQL性能优化17 &#8211; INSERT操作的优化">MySQL性能优化17 &#8211; INSERT操作的优化</a></li><li>September 8, 2010 -- <a href="http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9616-innodb-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/" title="MySQL性能优化16 &#8211; InnoDB 存储引擎">MySQL性能优化16 &#8211; InnoDB 存储引擎</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fred.oracle1.com/weblog/2010/09/08/mysql%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%9615-myisam-%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
