<?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>Observer Life &#187; MySql</title>
	<atom:link href="http://observerlife.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://observerlife.com</link>
	<description>To be a better man (Observer)</description>
	<lastBuildDate>Sun, 05 Sep 2010 16:21:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Help saving MySQL</title>
		<link>http://observerlife.com/help-saving-mysql/</link>
		<comments>http://observerlife.com/help-saving-mysql/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 07:28:43 +0000</pubDate>
		<dc:creator>ycg</dc:creator>
				<category><![CDATA[Focus]]></category>
		<category><![CDATA[MySql]]></category>

		<guid isPermaLink="false">http://www.kedy.cn/blog/?p=426</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160;&#160; 所有关注MySQL的朋友们一定还记得，在今年4月份的时候曾经发生了一件大事：Oracle收购Sun，而作为Sun之前收购的资产，原本是Oracle数据库威胁的MySQL也被Oracle收购。相信当时有非常多的朋友谈论到了MySQL的前途。那么现在，我们就需要做一些事情，来让MySQL的前途更加明确一点。欧盟一直没有同意Oracle与Sun的并购案原因之一就是对Oracle收购MySQL之后，MySQL的开源是否能够继续得到保证。现在我们看到，Oracle为了让欧盟能够通过并购案，已经准备将MySQL放置在这次并购案之外-成立新的实体来管理MySQL，因为Oracle与MySQL的关系，同时Oracle收购8个月以来一直未对MySQL的未来作出一定承诺，所以我和非常多的MySQL用户一样，会担心MySQL的前途。不知道你是否也担心呢？如果也担心的话，可以看看这个《Help saving MySQL》(翻墙进入)，然后决定在12.19号之前是否发送一个邮件，并通知给你周围使用MySQL数据库的朋友们，让他们也参与进来，大家一起为MySQL的将来而努力。 Related Posts:MySQL5.4的改进MYSQL:Host &#8216;XXXXXX&#8217; is blocked because of many connection errors中《士兵突击》的“毒”的主要症状 看你有几条？？2009年的元宵节&#8230;《士兵突击》- 许三多&#8211;伙伴的首席人选]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有关注MySQL的朋友们一定还记得，在今年4月份的时候曾经发生了一件大事：Oracle收购Sun，而作为Sun之前收购的资产，原本是Oracle数据库威胁的MySQL也被Oracle收购。相信当时有非常多的朋友谈论到了MySQL的前途。那么现在，我们就需要做一些事情，来让MySQL的前途更加明确一点。欧盟一直没有同意Oracle与Sun的并购案原因之一就是对Oracle收购MySQL之后，MySQL的开源是否能够继续得到保证。现在我们看到，Oracle为了让欧盟能够通过并购案，已经准备将MySQL放置在这次并购案之外-成立新的实体来管理MySQL，因为Oracle与MySQL的关系，同时Oracle收购8个月以来一直未对MySQL的未来作出一定承诺，所以我和非常多的MySQL用户一样，会担心MySQL的前途。不知道你是否也担心呢？如果也担心的话，可以看看这个《<a target="_blank" href="http://monty-says.blogspot.com/2009/12/help-saving-mysql.html">Help saving MySQL</a>》(翻墙进入)，然后决定在<strong>12.19号之前</strong>是否发送一个邮件，并通知给你周围使用MySQL数据库的朋友们，让他们也参与进来，大家一起为MySQL的将来而努力。</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/" rel="bookmark" class="crp_title">MySQL5.4的改进</a></li><li><a href="http://observerlife.com/mysqlhost-xxxxxx-is-blocked-because-of-many-connection-errors/" rel="bookmark" class="crp_title">MYSQL:Host &#8216;XXXXXX&#8217; is blocked because of many connection errors</a></li><li><a href="http://observerlife.com/%e4%b8%ad%e3%80%8a%e5%a3%ab%e5%85%b5%e7%aa%81%e5%87%bb%e3%80%8b%e7%9a%84%e2%80%9c%e6%af%92%e2%80%9d%e7%9a%84%e4%b8%bb%e8%a6%81%e7%97%87%e7%8a%b6-%e7%9c%8b%e4%bd%a0%e6%9c%89%e5%87%a0%e6%9d%a1%ef%bc%9f/" rel="bookmark" class="crp_title">中《士兵突击》的“毒”的主要症状 看你有几条？？</a></li><li><a href="http://observerlife.com/2009%e5%b9%b4%e7%9a%84%e5%85%83%e5%ae%b5%e8%8a%82/" rel="bookmark" class="crp_title">2009年的元宵节&#8230;</a></li><li><a href="http://observerlife.com/%e3%80%8a%e5%a3%ab%e5%85%b5%e7%aa%81%e5%87%bb%e3%80%8b-%e8%ae%b8%e4%b8%89%e5%a4%9a-%e4%bc%99%e4%bc%b4%e7%9a%84%e9%a6%96%e5%b8%ad%e4%ba%ba%e9%80%89/" rel="bookmark" class="crp_title">《士兵突击》- 许三多&#8211;伙伴的首席人选</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://observerlife.com/help-saving-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL5.4的改进</title>
		<link>http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/</link>
		<comments>http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 08:47:25 +0000</pubDate>
		<dc:creator>ycg</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[5.4]]></category>
		<category><![CDATA[subquery]]></category>

		<guid isPermaLink="false">http://www.kedy.cn/blog/?p=399</guid>
		<description><![CDATA[在几乎是与Oracle宣布收购SUN的同时，MySQL团队宣布发布MySQL5.4版本，按照官方文档：A quick look at MySQL 5.4里写的，MySQL 5.4并没有带来像Falcon引擎这样大的改进，但在MySQL可扩展性和更快的查询速度方面做出了不少改进： 1、可伸缩性能的提升。支持InnoDB存储引擎扩展至16路x86服务器和64路CMT服务器，性能提升了一倍。 2、子查询和JOIN的性能提升。这点也是这次系列升级中，我最关注的部分。在下面这条SQL语句中，官方文档给出的性能提升相当可观。 SQL代码 SELECT&#160;COUNT(l_orderkey)&#160;FROM&#160;lineitem&#160;&#160;&#160; &#160;&#160;WHERE&#160;l_linenumber=1&#160;AND&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;l_orderkey&#160;IN&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SELECT&#160;o_orderkey&#160;FROM&#160;orders&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WHERE&#160;o_totalprice&#160;&#62;&#160;1000&#160;AND&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;o_custkey&#160;IN&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(SELECT&#160;c_custkey&#160;FROM&#160;customer&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WHERE&#160;c_address&#160;LIKE&#160;'Le%'));&#160;&#160; &#160; Time Number of Reads MySQL 5.0/5.1 12 Minutes 9,000,000 MySQL 5.4 1.8 seconds 153,000 &#160;&#160;&#160;&#160;&#160;&#160; SubQuery也正是我前些天遇到问题的语句，原来版本中(我使用的是5.0)，MySQL无法对SubQuery实现优化，导致前端应用中速度特别慢。 &#160;&#160;&#160;&#160;&#160;&#160; 而同样一条JOIN查询，时间则由原来的4 Minutes 15.39 secs提高到44.41 seconds，这个提升，新查询只用了原时间的17%左右。按照文档里的说法，这个性能的提升等正式版本发布的时候，不仅限于InnoDB引擎，而是所有引擎均。 其他的都是现在没有特别关注的，比如：改进了存储过程，完善了prepared statements等。 &#160;&#160;&#160;&#160;&#160;&#160;&#160; 期待，过几天有时间了，Down个MySQL 5.4来试试看。到时再把实测结果发出来分享一下。 Related Posts:承诺SaBlog-X屏蔽机器人垃圾评论的方法nucer.org出国了爱过，拼过，玩过，哭过(二) 大学毕业时的回顾广东暂停发放ISP经营许可证 恢复时间另通知]]></description>
			<content:encoded><![CDATA[<p>在几乎是与Oracle宣布收购SUN的同时，MySQL团队宣布发布MySQL5.4版本，按照<a href="http://dev.mysql.com/tech-resources/articles/mysql-54.html">官方文档：A quick look at MySQL 5.4</a>里写的，MySQL 5.4并没有带来像Falcon引擎这样大的改进，但在MySQL可扩展性和更快的查询速度方面做出了不少改进：<br />
1、可伸缩性能的提升。支持InnoDB存储引擎扩展至16路x86服务器和64路CMT服务器，性能提升了一倍。<br />
2、子查询和JOIN的性能提升。这点也是这次系列升级中，我最关注的部分。在下面这条SQL语句中，官方文档给出的性能提升相当可观。</p>
<pre>
<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql" start="1">
<li class="alt"><span><span class="keyword">SELECT</span><span>&nbsp;</span><span class="func">COUNT</span><span>(l_orderkey)&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;lineitem&nbsp;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;l_linenumber=1&nbsp;</span><span class="op">AND</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_orderkey&nbsp;<span class="op">IN</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">SELECT</span><span>&nbsp;o_orderkey&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;orders&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;o_totalprice&nbsp;&gt;&nbsp;1000&nbsp;</span><span class="op">AND</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o_custkey&nbsp;<span class="op">IN</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="keyword">SELECT</span><span>&nbsp;c_custkey&nbsp;</span><span class="keyword">FROM</span><span>&nbsp;customer&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">WHERE</span><span>&nbsp;c_address&nbsp;</span><span class="op">LIKE</span><span>&nbsp;</span><span class="string">'Le%'</span><span>));&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</pre>
<table class="styled">
<tbody>
<tr>
<th>&nbsp;</th>
<th>Time</th>
<th>Number of Reads</th>
</tr>
<tr>
<td>MySQL 5.0/5.1</td>
<td><strong>12 Minutes</strong></td>
<td>9,000,000</td>
</tr>
<tr>
<td>MySQL 5.4</td>
<td><strong>1.8 seconds</strong></td>
<td>153,000</td>
</tr>
</tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SubQuery也正是我前些天遇到问题的语句，原来版本中(我使用的是5.0)，MySQL无法对SubQuery实现优化，导致前端应用中速度特别慢。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     而同样一条JOIN查询，时间则由原来的4 Minutes 15.39 secs提高到44.41 seconds，这个提升，新查询只用了原时间的17%左右。按照文档里的说法，这个性能的提升等正式版本发布的时候，不仅限于InnoDB引擎，而是所有引擎均。<br />
其他的都是现在没有特别关注的，比如：改进了存储过程，完善了prepared statements等。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 期待，过几天有时间了，Down个<a href="http://dev.mysql.com/downloads/mysql/5.4.html">MySQL 5.4</a>来试试看。到时再把实测结果发出来分享一下。</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://observerlife.com/%e6%89%bf%e8%af%ba/" rel="bookmark" class="crp_title">承诺</a></li><li><a href="http://observerlife.com/sablog-x%e5%b1%8f%e8%94%bd%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba%e7%9a%84%e6%96%b9%e6%b3%95/" rel="bookmark" class="crp_title">SaBlog-X屏蔽机器人垃圾评论的方法</a></li><li><a href="http://observerlife.com/nucer-org%e5%87%ba%e5%9b%bd%e4%ba%86/" rel="bookmark" class="crp_title">nucer.org出国了</a></li><li><a href="http://observerlife.com/%e7%88%b1%e8%bf%87%ef%bc%8c%e6%8b%bc%e8%bf%87%ef%bc%8c%e7%8e%a9%e8%bf%87%ef%bc%8c%e5%93%ad%e8%bf%87%e4%ba%8c-%e5%a4%a7%e5%ad%a6%e6%af%95%e4%b8%9a%e6%97%b6%e7%9a%84%e5%9b%9e%e9%a1%be/" rel="bookmark" class="crp_title">爱过，拼过，玩过，哭过(二) 大学毕业时的回顾</a></li><li><a href="http://observerlife.com/%e5%b9%bf%e4%b8%9c%e6%9a%82%e5%81%9c%e5%8f%91%e6%94%beisp%e7%bb%8f%e8%90%a5%e8%ae%b8%e5%8f%af%e8%af%81-%e6%81%a2%e5%a4%8d%e6%97%b6%e9%97%b4%e5%8f%a6%e9%80%9a%e7%9f%a5/" rel="bookmark" class="crp_title">广东暂停发放ISP经营许可证 恢复时间另通知</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amoeba &#8212; 阿里巴巴工程师的开源项目之一</title>
		<link>http://observerlife.com/amoeba-%e9%98%bf%e9%87%8c%e5%b7%b4%e5%b7%b4%e5%b7%a5%e7%a8%8b%e5%b8%88%e7%9a%84%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e4%b9%8b%e4%b8%80/</link>
		<comments>http://observerlife.com/amoeba-%e9%98%bf%e9%87%8c%e5%b7%b4%e5%b7%b4%e5%b7%a5%e7%a8%8b%e5%b8%88%e7%9a%84%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e4%b9%8b%e4%b8%80/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 07:01:14 +0000</pubDate>
		<dc:creator>ycg</dc:creator>
				<category><![CDATA[Focus]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[负载均衡]]></category>

		<guid isPermaLink="false">http://www.kedy.cn/blog/?p=385</guid>
		<description><![CDATA[Amoeba (阿米巴, 就是变形虫的意思) 是陈思儒开发的开源软件项目。软件设计目标 (分布式数据库 Proxy) 应该是参考了 MySQL Proxy 的设计思路，版本的更新也挺快。 作者现在把 Amoeba 定义为一个框架，在其下面已经有 Amoeba for MySQL 与 Amoeba for Aladdin 两个产品了。 Related Posts:FreeBSD6.2 安装mysql5备忘HTTP/1.1 Cache-Control header fieldHelp saving MySQLWget使用详解MySQL5.4的改进]]></description>
			<content:encoded><![CDATA[<p><a href="http://amoeba.sourceforge.net/">Amoeba</a> (阿米巴, 就是变形虫的意思) 是陈思儒开发的开源软件项目。软件设计目标 (分布式数据库 Proxy) 应该是参考了 MySQL Proxy 的设计思路，版本的更新也挺快。</p>
<p>作者现在把 Amoeba 定义为一个框架，在其下面已经有 Amoeba for MySQL 与 Amoeba for Aladdin 两个产品了。</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://observerlife.com/freebsd6-2-%e5%ae%89%e8%a3%85mysql5%e5%a4%87%e5%bf%98/" rel="bookmark" class="crp_title">FreeBSD6.2 安装mysql5备忘</a></li><li><a href="http://observerlife.com/http1-1-cache-control-header-field/" rel="bookmark" class="crp_title">HTTP/1.1 Cache-Control header field</a></li><li><a href="http://observerlife.com/help-saving-mysql/" rel="bookmark" class="crp_title">Help saving MySQL</a></li><li><a href="http://observerlife.com/wget%e4%bd%bf%e7%94%a8%e8%af%a6%e8%a7%a3/" rel="bookmark" class="crp_title">Wget使用详解</a></li><li><a href="http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/" rel="bookmark" class="crp_title">MySQL5.4的改进</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://observerlife.com/amoeba-%e9%98%bf%e9%87%8c%e5%b7%b4%e5%b7%b4%e5%b7%a5%e7%a8%8b%e5%b8%88%e7%9a%84%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e4%b9%8b%e4%b8%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>几点不常见的MySQL优化知识</title>
		<link>http://observerlife.com/%e5%87%a0%e7%82%b9%e4%b8%8d%e5%b8%b8%e8%a7%81%e7%9a%84mysql%e4%bc%98%e5%8c%96%e7%9f%a5%e8%af%86/</link>
		<comments>http://observerlife.com/%e5%87%a0%e7%82%b9%e4%b8%8d%e5%b8%b8%e8%a7%81%e7%9a%84mysql%e4%bc%98%e5%8c%96%e7%9f%a5%e8%af%86/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 02:08:45 +0000</pubDate>
		<dc:creator>ycg</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.kedy.cn/blog/?p=339</guid>
		<description><![CDATA[If you use pgcc and compile everything with -O6, the mysqld server is 1% faster than with gcc 2.95.2. If you link dynamically (without -static), the result is 13% slower on Linux. Note that you still can use a dynamically linked MySQL library for your client applications. It is the server that is most critical [...]]]></description>
			<content:encoded><![CDATA[<ul type="disc">
<li>
<p>If you use <code class="literal">pgcc</code> and compile everything with <code class="option">-O6</code>, the <span><strong class="command">mysqld</strong></span>  server is 1% faster than with <span><strong class="command">gcc</strong></span>  2.95.2.</p>
</li>
<li>
<p>If you link dynamically (without <code class="option">-static</code>), the  result is 13% slower on Linux. Note that you still can use a dynamically linked  MySQL library for your client applications. It is the server that is most  critical for performance.</p>
</li>
<li>
<p>If you strip your <span><strong class="command">mysqld</strong></span> binary  with <code class="literal">strip mysqld</code>, the resulting binary can be up to  4% faster.</p>
</li>
<li>
<p>For a connection from a client to a server running on the same host, if you  connect using TCP/IP rather than a Unix socket file, performance is 7.5% slower.  (On Unix, if you connect to the hostname <code class="literal">localhost</code>,  MySQL uses a socket file by default.)</p>
</li>
<li>
<p>For TCP/IP connections from a client to a server, connecting to a remote  server on another host is 8-11% slower than connecting to the local server on  the same host, even for connections over 100Mb/s Ethernet.</p>
</li>
<li>
<p>When running our benchmark tests using secure connections (all data encrypted  with internal SSL support) performance was 55% slower than for unencrypted  connections.</p>
</li>
<li>
<p>If you compile with <code class="option">--with-debug=full</code>, most queries  are 20% slower. Some queries may take substantially longer; for example, the  MySQL benchmarks ran 35% slower. If you use <code class="option">--with-debug</code> (without <code class="literal">=full</code>), the  slowdown is only 15%. For a version of <span><strong class="command">mysqld</strong></span> that has been compiled with <code class="option">--with-debug=full</code>, you can disable memory checking at  runtime by starting it with the <code class="option">--skip-safemalloc</code>  option. The execution speed should then be close to that obtained when  configuring with <code class="option">--with-debug</code>.</p>
</li>
<li>
<p>On a Sun UltraSPARC-IIe, a server compiled with Forte 5.0 is 4% faster than  one compiled with <span><strong class="command">gcc</strong></span> 3.2.</p>
</li>
<li>
<p>On a Sun UltraSPARC-IIe, a server compiled with Forte 5.0 is 4% faster in  32-bit mode than in 64-bit mode.</p>
</li>
<li>
<p>Compiling with <span><strong class="command">gcc</strong></span> 2.95.2 for  UltraSPARC with the <code class="option">-mcpu=v8 -Wa,-xarch=v8plusa</code>  options gives 4% more performance.</p>
</li>
<li>
<p>On Solaris 2.5.1, MIT-pthreads is 8-12% slower than Solaris native threads on  a single processor. With more load or CPUs, the difference should be larger.</p>
</li>
<li>
<p>Compiling on Linux-x86 using <span><strong class="command">gcc</strong></span>  without frame pointers (<code class="option">-fomit-frame-pointer</code> or <code class="option">-fomit-frame-pointer -ffixed-ebp</code>) makes <span><strong class="command">mysqld</strong></span> 1-4% faster.</p>
</li>
</ul>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://observerlife.com/sablog-x%e5%b1%8f%e8%94%bd%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba%e7%9a%84%e6%96%b9%e6%b3%95/" rel="bookmark" class="crp_title">SaBlog-X屏蔽机器人垃圾评论的方法</a></li><li><a href="http://observerlife.com/xargs%e7%94%a8%e6%b3%95%e4%b8%80%e4%be%8b/" rel="bookmark" class="crp_title">Xargs用法一例</a></li><li><a href="http://observerlife.com/preg_replace_callback%e6%80%8e%e6%a0%b7%e4%bd%bf%e7%94%a8%e7%b1%bb%e4%b8%ad%e7%9a%84%e5%9b%9e%e8%b0%83%e5%87%bd%e6%95%b0/" rel="bookmark" class="crp_title">preg_replace_callback()怎样使用类中的回调函数</a></li><li><a href="http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/" rel="bookmark" class="crp_title">MySQL5.4的改进</a></li><li><a href="http://observerlife.com/%e6%89%bf%e8%af%ba/" rel="bookmark" class="crp_title">承诺</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://observerlife.com/%e5%87%a0%e7%82%b9%e4%b8%8d%e5%b8%b8%e8%a7%81%e7%9a%84mysql%e4%bc%98%e5%8c%96%e7%9f%a5%e8%af%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD6.2 安装mysql5备忘</title>
		<link>http://observerlife.com/freebsd6-2-%e5%ae%89%e8%a3%85mysql5%e5%a4%87%e5%bf%98/</link>
		<comments>http://observerlife.com/freebsd6-2-%e5%ae%89%e8%a3%85mysql5%e5%a4%87%e5%bf%98/#comments</comments>
		<pubDate>Sat, 27 Oct 2007 09:10:58 +0000</pubDate>
		<dc:creator>ycg</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[freebsd]]></category>

		<guid isPermaLink="false">http://www.kedy.cn/blog/?p=295</guid>
		<description><![CDATA[cd /usr/ports/databases/mysql51-server #编译安装（FreeBSD默认不带入所有字符集支持，需要声明打开） make WITH_XCHARSET=all install clean 或自定义参数： #make WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean rehash #复制配置文件（#服务器内存4G，但是与apache在一起）： cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf #设置随机启动： vi /etc/rc.conf mysql_enable=&#34;YES&#34; #初始化： /usr/local/bin/mysql_install_db &#8211;user=mysql #更改数据库权限（若所有者不是mysql）： chown -R mysql /var/db/mysql/ #立即启动： /usr/local/bin/mysqld_safe -user=mysql &#38; #修改mysql root密码： /usr/local/bin/mysqladmin -u root password &#8216;newpasswd&#8217; #测试： mysql -u root -p mysql&#62; show databases; #启动/重启/停止mysqld [...]]]></description>
			<content:encoded><![CDATA[<p>cd /usr/ports/databases/mysql51-server<br />
#编译安装（FreeBSD默认不带入所有字符集支持，需要声明打开）<br />
make WITH_XCHARSET=all install clean<br />
或自定义参数：<br />
#make WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean</p>
<p>rehash</p>
<p>#复制配置文件（#服务器内存4G，但是与apache在一起）：<br />
cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf</p>
<p>#设置随机启动：<br />
vi /etc/rc.conf<br />
mysql_enable=&quot;YES&quot;</p>
<p>#初始化：<br />
/usr/local/bin/mysql_install_db &#8211;user=mysql <br />
#更改数据库权限（若所有者不是mysql）：<br />
chown -R mysql /var/db/mysql/</p>
<p>#立即启动：<br />
/usr/local/bin/mysqld_safe -user=mysql &amp;</p>
<p>#修改mysql root密码：<br />
/usr/local/bin/mysqladmin -u root password &#8216;newpasswd&#8217;</p>
<p>#测试：<br />
mysql -u root -p<br />
mysql&gt; show databases;</p>
<p>
#启动/重启/停止mysqld<br />
/usr/local/etc/rc.d/mysql-server start (等于/usr/local/bin/mysqld_safe -user=mysql &amp;)<br />
/usr/local/etc/rc.d/mysql-server restart<br />
/usr/local/etc/rc.d/mysql-server stop</p>
<p># end</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://observerlife.com/mysqlhost-xxxxxx-is-blocked-because-of-many-connection-errors/" rel="bookmark" class="crp_title">MYSQL:Host &#8216;XXXXXX&#8217; is blocked because of many connection errors</a></li><li><a href="http://observerlife.com/help-saving-mysql/" rel="bookmark" class="crp_title">Help saving MySQL</a></li><li><a href="http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/" rel="bookmark" class="crp_title">MySQL5.4的改进</a></li><li><a href="http://observerlife.com/mysql-4-1-%e5%ad%97%e7%ac%a6%e9%9b%86%e6%94%af%e6%8c%81%e7%9a%84%e5%8e%9f%e7%90%86-%e8%bd%ac/" rel="bookmark" class="crp_title">MySQL 4.1 字符集支持的原理 (转)</a></li><li><a href="http://observerlife.com/%e5%b1%85%e7%84%b6%e9%81%87%e5%88%b0%e4%ba%86bigint/" rel="bookmark" class="crp_title">居然遇到了bigint</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://observerlife.com/freebsd6-2-%e5%ae%89%e8%a3%85mysql5%e5%a4%87%e5%bf%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL的优化[zt]</title>
		<link>http://observerlife.com/mysql%e7%9a%84%e4%bc%98%e5%8c%96zt/</link>
		<comments>http://observerlife.com/mysql%e7%9a%84%e4%bc%98%e5%8c%96zt/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 01:32:27 +0000</pubDate>
		<dc:creator>ycg</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.kedy.cn/blog/?p=152</guid>
		<description><![CDATA[(本文是Monty在O&#8217;Reilly Open Source Convention 2000大会上的演讲) MySQL的优化(本文是Monty在O&#8217;Reilly Open Source Convention 2000大会上的演讲) [晏子 编译整理] 一、我们可以且应该优化什么？ 硬件 操作系统/软件库 SQL服务器(设置和查询) 应用编程接口(API) 应用程序 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 二、优化硬件 如果你需要庞大的数据库表(&#62;2G)，你应该考虑使用64位的硬件结构，像Alpha、Sparc或即将推出的IA64。因为MySQL内部使用大量64位的整数，64位的CPU将提供更好的性能。 对大数据库，优化的次序一般是RAM、快速硬盘、CPU能力。 更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新。 如果不使用事务安全(transaction-safe)的表或有大表并且想避免长文件检查，一台UPS就能够在电源故障时让系统安全关闭。 对于数据库存放在一个专用服务器的系统，应该考虑1G的以太网。延迟与吞吐量同样重要。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 三、优化磁盘 为系统、程序和临时文件配备一个专用磁盘，如果确是进行很多修改工作，将更新日志和事务日志放在专用磁盘上。低 寻道时间对数据库磁盘非常重要。对与大表，你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表，索引Mediun int类型的列，需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2M的空间。实际上，大多数块将被缓存，所以大概只需要1-2次寻道。然而对于写入（如上），你将需要4次寻道请求来找到在哪里存放新键码，而且一般要2次寻道来更新索引并写入一行。对于非常大的数据库，你的应用将受到磁盘寻道速度的限制，随着数据量的增加呈N log N数据级递增。将数据库和表分在不同的磁盘上。在MySQL中，你可以为此而使用符号链接。条列磁盘(RAID 0)将提高读和写的吞吐量。带镜像的条列(RAID 0+1)将更安全并提高读取的吞吐量。写入的吞吐量将有所降低。不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或RAID(除了RAID 0)。在Linux上，在引导时对磁盘使用命令hdparm -m16 -d1以启用同时读写多个扇区和DMA功能。这可以将响应时间提高5~50%。在Linux上，用async (默认)和noatime挂载磁盘(mount)。对于某些特定应用，可以对某些特定表使用内存磁盘，但通常不需要。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 四、优化操作系统 不要交换区。如果内存不足，增加更多的内存或配置你的系统使用较少内存。不要使用NFS磁盘(会有NFS锁定的问题)。增加系统和MySQL服务器的打开文件数量。(在safe_mysqld脚本中加入ulimit -n #)。增加系统的进程和线程数量。如果你有相对较少的大表，告诉文件系统不要将文件打碎在不同的磁道上(Solaris)。使用支持大文件的文件系统(Solaris)。选择使用哪种文件系统。在Linux上的Reiserfs对于打开、读写都非常快。文件检查只需几秒种。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 五、选择应用编程接口 PERL可在不同的操作系统和数据库之间移植。适宜快速原型。应该使用DBI/DBD接口。PHP比PERL易学。使用比PERL少的资源。通过升级到PHP4可以获得更快的速度。CMySQL的原生接口。较快并赋予更多的控制。低层，所以必须付出更多。C++较高层次，给你更多的时间来编写应用。仍在开发中ODBC运行在Windows和Unix上。几乎可在不同的SQL服务器间移植。较慢。MyODBC只是简单的直通驱动程序，比用原生接口慢19%。有很多方法做同样的事。很难像很多ODBC驱动程序那样运行，在不同的领域还有不同的错误。问题成堆。Microsoft偶尔还会改变接口。不明朗的未来。(Microsoft更推崇OLE而非ODBC)ODBC运行在Windows和Unix上。几乎可在不同的SQL服务器间移植。较慢。MyODBC只是简单的直通驱动程序，比用原生接口慢19%。有很多方法做同样的事。很难像很多ODBC驱动程序那样运行，在不同的领域还有不同的错误。问题成堆。Microsoft偶尔还会改变接口。不明朗的未来。(Microsoft更推崇OLE而非ODBC)JDBC理论上可在不同的操作系统何时据库间移植。可以运行在web客户端。Python和其他可能不错，可我们不用它们。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 六、优化应用 应该集中精力解决问题。在编写应用时，应该决定什么是最重要的：速度操作系统间的可移植性SQL服务器间的可移植性使用持续的连接。.缓存应用中的数据以减少SQL服务器的负载。不要查询应用中不需要的列。不要使用SELECT [...]]]></description>
			<content:encoded><![CDATA[<p>(本文是Monty在O&#8217;Reilly Open Source Convention 2000大会上的演讲) </p>
<p>MySQL的优化<br />(本文是Monty在O&#8217;Reilly Open Source Convention 2000大会上的演讲) </p>
<p>[晏子 编译整理] </p>
<p>一、我们可以且应该优化什么？ </p>
<p>硬件 </p>
<p>操作系统/软件库 </p>
<p>SQL服务器(设置和查询) </p>
<p>应用编程接口(API) </p>
<p>应用程序 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二、优化硬件 </p>
<p>如果你需要庞大的数据库表(&gt;2G)，你应该考虑使用64位的硬件结构，像Alpha、Sparc或即将推出的IA64。因为MySQL内部使用大量64位的整数，64位的CPU将提供更好的性能。 </p>
<p>对大数据库，优化的次序一般是RAM、快速硬盘、CPU能力。 </p>
<p>更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新。 </p>
<p>如果不使用事务安全(transaction-safe)的表或有大表并且想避免长文件检查，一台UPS就能够在电源故障时让系统安全关闭。 </p>
<p>对于数据库存放在一个专用服务器的系统，应该考虑1G的以太网。延迟与吞吐量同样重要。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三、优化磁盘 </p>
<p>为系统、程序和临时文件配备一个专用磁盘，如果确是进行很多修改工作，将更新日志和事务日志放在专用磁盘上。<br />低 寻道时间对数据库磁盘非常重要。对与大表，你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表，索引Mediun int类型的列，需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2M的空间。实际上，大多数块将被缓存，所以大概只需要1-2次寻道。<br />然而对于写入（如上），你将需要4次寻道请求来找到在哪里存放新键码，而且一般要2次寻道来更新索引并写入一行。<br />对于非常大的数据库，你的应用将受到磁盘寻道速度的限制，随着数据量的增加呈N log N数据级递增。<br />将数据库和表分在不同的磁盘上。在MySQL中，你可以为此而使用符号链接。<br />条列磁盘(RAID 0)将提高读和写的吞吐量。<br />带镜像的条列(RAID 0+1)将更安全并提高读取的吞吐量。写入的吞吐量将有所降低。<br />不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或RAID(除了RAID 0)。<br />在Linux上，在引导时对磁盘使用命令hdparm -m16 -d1以启用同时读写多个扇区和DMA功能。这可以将响应时间提高5~50%。<br />在Linux上，用async (默认)和noatime挂载磁盘(mount)。<br />对于某些特定应用，可以对某些特定表使用内存磁盘，但通常不需要。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>四、优化操作系统 </p>
<p>不要交换区。如果内存不足，增加更多的内存或配置你的系统使用较少内存。<br />不要使用NFS磁盘(会有NFS锁定的问题)。<br />增加系统和MySQL服务器的打开文件数量。(在safe_mysqld脚本中加入ulimit -n #)。<br />增加系统的进程和线程数量。<br />如果你有相对较少的大表，告诉文件系统不要将文件打碎在不同的磁道上(Solaris)。<br />使用支持大文件的文件系统(Solaris)。<br />选择使用哪种文件系统。在Linux上的Reiserfs对于打开、读写都非常快。文件检查只需几秒种。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>五、选择应用编程接口 </p>
<p>PERL<br />可在不同的操作系统和数据库之间移植。<br />适宜快速原型。<br />应该使用DBI/DBD接口。<br />PHP<br />比PERL易学。<br />使用比PERL少的资源。<br />通过升级到PHP4可以获得更快的速度。<br />C<br />MySQL的原生接口。<br />较快并赋予更多的控制。<br />低层，所以必须付出更多。<br />C++<br />较高层次，给你更多的时间来编写应用。<br />仍在开发中<br />ODBC<br />运行在Windows和Unix上。<br />几乎可在不同的SQL服务器间移植。<br />较慢。MyODBC只是简单的直通驱动程序，比用原生接口慢19%。<br />有很多方法做同样的事。很难像很多ODBC驱动程序那样运行，在不同的领域还有不同的错误。<br />问题成堆。Microsoft偶尔还会改变接口。<br />不明朗的未来。(Microsoft更推崇OLE而非ODBC)<br />ODBC<br />运行在Windows和Unix上。<br />几乎可在不同的SQL服务器间移植。<br />较慢。MyODBC只是简单的直通驱动程序，比用原生接口慢19%。<br />有很多方法做同样的事。很难像很多ODBC驱动程序那样运行，在不同的领域还有不同的错误。<br />问题成堆。Microsoft偶尔还会改变接口。<br />不明朗的未来。(Microsoft更推崇OLE而非ODBC)<br />JDBC<br />理论上可在不同的操作系统何时据库间移植。<br />可以运行在web客户端。<br />Python和其他<br />可能不错，可我们不用它们。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>六、优化应用 </p>
<p>应该集中精力解决问题。<br />在编写应用时，应该决定什么是最重要的：<br />速度<br />操作系统间的可移植性<br />SQL服务器间的可移植性<br />使用持续的连接。.<br />缓存应用中的数据以减少SQL服务器的负载。<br />不要查询应用中不需要的列。<br />不要使用SELECT * FROM table_name&#8230;<br />测试应用的所有部分，但将大部分精力放在在可能最坏的合理的负载下的测试整体应用。通过以一种模块化的方式进行，你应该能用一个快速&ldquo;哑模块&rdquo;替代找到的瓶颈，然后很容易地标出下一个瓶颈。<br />如果在一个批处理中进行大量修改，使用LOCK TABLES。例如将多个UPDATES或DELETES集中在一起。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>七、应该使用可移植的应用 </p>
<p>Perl DBI/DBD<br />ODBC<br />JDBC<br />Python(或其他有普遍SQL接口的语言)<br />你应该只使用存在于所有目的SQL服务器中或可以很容易地用其他构造模拟的SQL构造。www.mysql.com上的Crash-me页可以帮助你。<br />为操作系统/SQL服务器编写包装程序来提供缺少的功能。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>八、如果你需要更快的速度，你应该： </p>
<p>找出瓶颈(CPU、磁盘、内存、SQL服务器、操作系统、API或应用)并集中全力解决。<br />使用给予你更快速度/灵活性的扩展。<br />逐渐了解SQL服务器以便能为你的问题使用可能最快的SQL构造并避免瓶颈。<br />优化表布局和查询。<br />使用复制以获得更快的选择(select)速度。<br />如果你有一个慢速的网络连接数据库，使用压缩客户/服务器协议。<br />不要害怕时应用的第一个版本不能完美地移植，在你解决问题时，你总是可以在以后优化它。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>九、优化MySQL </p>
<p>挑选编译器和编译选项。<br />位你的系统寻找最好的启动选项。<br />通读MySQL参考手册并阅读Paul DuBios的《MySQL》一书。(已有中文版-译注)<br />多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST。<br />了解查询优化器的工作原理。<br />优化表的格式。<br />维护你的表(myisamchk、CHECK TABLE、 OPTIMIZE TABLE)<br />使用MySQL的扩展功能以让一切快速完成。<br />如果你注意到了你将在很多场合需要某些函数，编写MySQL UDF函数。<br />不要使用表级或列级的GRANT，除非你确实需要。<br />购买MySQL技术支持以帮助你解决问题:) </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十、编译和安装MySQL </p>
<p>通过位你的系统挑选可能最好的编译器，你通常可以获得10-30%的性能提高。<br />在Linux/Intel平台上，用pgcc(gcc的奔腾芯片优化版)编译MySQL。然而，二进制代码将只能运行在Intel奔腾CPU上。<br />对于一种特定的平台，使用MySQL参考手册上推荐的优化选项。<br />一般地，对特定CPU的原生编译器(如Sparc的Sun Workshop)应该比gcc提供更好的性能，但不总是这样。<br />用你将使用的字符集编译MySQL。<br />静态编译生成mysqld的执行文件(用&#8211;with-mysqld-ldflags=all-static)并用strip sql/mysqld整理最终的执行文件。<br />注意，既然MySQL不使用C++扩展，不带扩展支持编译MySQL将赢得巨大的性能提高。<br />如果操作系统支持原生线程，使用原生线程(而不用mit-pthreads)。<br />用MySQL基准测试来测试最终的二进制代码。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十一、维护 </p>
<p>如果可能，偶尔运行一下OPTIMIZE table，这对大量更新的变长行非常重要。<br />偶尔用myisamchk -a更新一下表中的键码分布统计。记住在做之前关掉MySQL。<br />如果有碎片文件，可能值得将所有文件复制到另一个磁盘上，清除原来的磁盘并拷回文件。<br />如果遇到问题，用myisamchk或CHECK table检查表。<br />用mysqladmin -i10 precesslist extended-status监控MySQL的状态。<br />用MySQL GUI客户程序，你可以在不同的窗口内监控进程列表和状态。<br />使用mysqladmin debug获得有关锁定和性能的信息。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十二、优化SQL </p>
<p>扬SQL之长，其它事情交由应用去做。使用SQL服务器来做： </p>
<p>找出基于WHERE子句的行。<br />JOIN表<br />GROUP BY<br />ORDER BY<br />DISTINCT<br />不要使用SQL来做： </p>
<p>检验数据(如日期)<br />成为一只计算器<br />技巧： </p>
<p>明智地使用键码。<br />键码适合搜索，但不适合索引列的插入/更新。<br />保持数据为数据库第三范式，但不要担心冗余信息或这如果你需要更快的速度，创建总结表。<br />在大表上不做GROUP BY，相反创建大表的总结表并查询它。<br />UPDATE table set count=count+1 where key_column=constant非常快。<br />对于大表，或许最好偶尔生成总结表而不是一直保持总结表。<br />充分利用INSERT的默认值。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十三、不同SQL服务器的速度差别（以秒计） </p>
<p>　 </p>
<p>通过键码读取2000000行： NT Linux<br />mysql 367 249<br />mysql_odbc 464 　<br />db2_odbc 1206 　<br />informix_odbc 121126 　<br />ms-sql_odbc 1634 　<br />oracle_odbc 20800 　<br />solid_odbc 877 　<br />sybase_odbc 17614 　<br />　<br />插入350768行： NT Linux<br />mysql 381 206<br />mysql_odbc 619 　<br />db2_odbc 3460 　<br />informix_odbc 2692 　<br />ms-sql_odbc 4012 　<br />oracle_odbc 11291 　<br />solid_odbc 1801 　<br />sybase_odbc 4802 　 </p>
<p>在上述测试中，MySQL配置8M高速缓存运行，其他数据库以默认安装运行。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十四、重要的MySQL启动选项 </p>
<p>back_log 如果需要大量新连接，修改它。<br />thread_cache_size 如果需要大量新连接，修改它。<br />key_buffer_size 索引页池，可以设成很大。<br />bdb_cache_size BDB表使用的记录和键吗高速缓存。<br />table_cache 如果有很多的表和并发连接，修改它。<br />delay_key_write 如果需要缓存所有键码写入，设置它。<br />log_slow_queries 找出需花大量时间的查询。<br />max_heap_table_size 用于GROUP BY<br />sort_buffer 用于ORDER BY和GROUP BY<br />myisam_sort_buffer_size 用于REPAIR TABLE<br />join_buffer_size 在进行无键吗的联结时使用。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十五、优化表 </p>
<p>MySQL拥有一套丰富的类型。你应该对每一列尝试使用最有效的类型。<br />ANALYSE过程可以帮助你找到表的最优类型：SELECT * FROM table_name PROCEDURE ANALYSE()。<br />对于不保存NULL值的列使用NOT NULL，这对你想索引的列尤其重要。<br />将ISAM类型的表改为MyISAM。<br />如果可能，用固定的表格式创建表。<br />不要索引你不想用的东西。<br />利用MySQL能按一个索引的前缀进行查询的事实。如果你有索引INDEX(a,b)，你不需要在a上的索引。<br />不在长CHAR/VARCHAR列上创建索引，而只索引列的一个前缀以节省存储空间。CREATE TABLE table_name (hostname CHAR(255) not null, index(hostname(10)))<br />对每个表使用最有效的表格式。<br />在不同表中保存相同信息的列应该有同样的定义并具有相同的列名。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十六、MySQL如何次存储数据 </p>
<p>数据库以目录存储。<br />表以文件存储。<br />列以变长或定长格式存储在文件中。对BDB表，数据以页面形式存储。<br />支持基于内存的表。<br />数据库和表可在不同的磁盘上用符号连接起来。<br />在Windows上，MySQL支持用.sym文件内部符号连接数据库。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十七、MySQL表类型 </p>
<p>HEAP表：固定行长的表，只存储在内存中并用HASH索引进行索引。<br />ISAM表：MySQL 3.22中的早期B-tree表格式。<br />MyIASM：IASM表的新版本，有如下扩展：<br />二进制层次的可移植性。<br />NULL列索引。<br />对变长行比ISAM表有更少的碎片。<br />支持大文件。<br />更好的索引压缩。<br />更好的键吗统计分布。<br />更好和更快的auto_increment处理。<br />来自Sleepcat的Berkeley DB(BDB)表：事务安全(有BEGIN WORK/COMMIT|ROLLBACK)。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十八、MySQL行类型（专指IASM/MyIASM表） </p>
<p>如果所有列是定长格式(没有VARCHAR、BLOB或TEXT)，MySQL将以定长表格式创建表，否则表以动态长度格式创建。<br />定长格式比动态长度格式快很多并更安全。<br />动态长度行格式一般占用较少的存储空间，但如果表频繁更新，会产生碎片。<br />在某些情况下，不值得将所有VARCHAR、BLOB和TEXT列转移到另一个表中，只是获得主表上的更快速度。<br />利用myiasmchk（对ISAM，pack_iasm），可以创建只读压缩表，这使磁盘使用率最小，但使用慢速磁盘时，这非常不错。压缩表充分地利用将不再更新的日志表 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>十九、MySQL高速缓存（所有线程共享，一次性分配） </p>
<p>键码缓存：key_buffer_size，默认8M。<br />表缓存：table_cache，默认64。<br />线程缓存：thread_cache_size，默认0。<br />主机名缓存：可在编译时修改，默认128。<br />内存映射表：目前仅用于压缩表。<br />注意：MySQL没有行高速缓存，而让操作系统处理。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十、MySQL缓存区变量（非共享，按需分配） </p>
<p>sort_buffer：ORDER BY/GROUP BY<br />record_buffer：扫描表。<br />join_buffer_size：无键联结<br />myisam_sort_buffer_size：REPAIR TABLE<br />net_buffer_length:对于读SQL语句并缓存结果。<br />tmp_table_size：临时结果的HEAP表大小。<br />　 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十一、MySQL表高速缓存工作原理 </p>
<p>每个MyISAM表的打开实例(instance)使用一个索引文件和一个数据文件。如果表被两个线程使用或在同一条查询中使用两次，MyIASM将共享索引文件而是打开数据文件的另一个实例。<br />如果所有在高速缓存中的表都在使用，缓存将临时增加到比表缓存尺寸大些。如果是这样，下一个被释放的表将被关闭。<br />你可以通过检查mysqld的Opened_tables变量以检查表缓存是否太小。如果该值太高，你应该增大表高速缓存。<br />　 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十二、MySQL扩展/优化-提供更快的速度 </p>
<p>使用优化的表类型（HEAP、MyIASM或BDB表）。<br />对数据使用优化的列。<br />如果可能使用定长行。<br />使用不同的锁定类型（SELECT HIGH_PRIORITY，INSERT LOW_PRIORITY）<br />Auto_increment<br />REPLACE (REPLACE INTO table_name VALUES (&#8230;))<br />INSERT DELAYED<br />LOAD DATA INFILE / LOAD_FILE()<br />使用多行INSERT一次插入多行。<br />SELECT INTO OUTFILE<br />LEFT JOIN, STRAIGHT JOIN<br />LEFT JOIN ，结合IS NULL<br />ORDER BY可在某些情况下使用键码。<br />如果只查询在一个索引中的列，将只使用索引树解决查询。<br />联结一般比子查询快（对大多数SQL服务器亦如此）。<br />LIMIT<br />SELECT * from table1 WHERE a &gt; 10 LIMIT 10,20<br />DELETE * from table1 WHERE a &gt; 10 LIMIT 10<br />foo IN (常数列表) 高度优化。<br />GET_LOCK()/RELEASE_LOCK()<br />LOCK TABLES<br />INSERT和SELECT可同时运行。<br />UDF函数可装载进一个正在运行的服务器。<br />压缩只读表。<br />CREATE TEMPORARY TABLE<br />CREATE TABLE .. SELECT<br />带RAID选项的MyIASM表将文件分割成很多文件以突破某些文件系统的2G限制。<br />Delay_keys<br />复制功能 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十二、MySQL何时使用索引 </p>
<p>对一个键码使用&gt;, &gt;=, =, 1 and key_part1 explain select t3.DateOfAction, t1.TransactionID<br />-&gt; from t1 join t2 join t3<br />-&gt; where t2.ID = t1.TransactionID and t3.ID = t2.GroupID<br />-&gt; order by t3.DateOfAction, t1.TransactionID;<br />+&#8212;&#8212;-+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />| table | type | possible_keys | key | key_len | ref | rows | Extra |<br />+&#8212;&#8212;-+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />| t1 | ALL | NULL | NULL | NULL | NULL | 11 | Using temporary; Using filesort |<br />| t2 | ref | ID | ID | 4 | t1.TransactionID | 13 | |<br />| t3 | eq_ref | PRIMARY | PRIMARY | 4 | t2.GroupID | 1 | |<br />+&#8212;&#8212;-+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />ALL和范围类型提示一个潜在的问题。<br />　 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十五、学会使用SHOW PROCESSLIST </p>
<p>使用SHOW processlist来发现正在做什么：<br />+&#8212;-+&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8211;+&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />| Id | User | Host | db | Command | Time | State | Info |<br />+&#8212;-+&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8211;+&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />| 6 | monty | localhost | bp | Query | 15 | Sending data | select * from station,station as s1 |<br />| 8 | monty | localhost | | Query | 0 | | show processlist |<br />+&#8212;-+&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8211;+&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />在mysql或mysqladmin中用KILL来杀死溜掉的线程。<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十六、如何知晓MySQL解决一条查询 </p>
<p>运行项列命令并试图弄明白其输出：<br />SHOW VARIABLES;<br />SHOW COLUMNS FROM &#8230;G<br />EXPLAIN SELECT &#8230;G<br />FLUSH STATUS;<br />SELECT &#8230;;<br />SHOW STATUS; </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十七、MySQL非常不错 </p>
<p>日志<br />在进行很多连接时，连接非常快。<br />同时使用SELECT和INSERT的场合。<br />在不把更新与耗时太长的选择结合时。<br />在大多数选择/更新使用唯一键码时。<br />在使用没有长时间冲突锁定的多个表时。<br />在用大表时(MySQL使用一个非常紧凑的表格式)。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十八、MySQL应避免的事情 </p>
<p>用删掉的行更新或插入表，结合要耗时长的SELECT。<br />在能放在WHERE子句中的列上用HAVING。<br />不使用键码或键码不够唯一而进行JOIN。<br />在不同列类型的列上JOIN。<br />在不使用=匹配整个键码时使用HEAP表。<br />在MySQL监控程序中忘记在UPDATE或DELETE中使用一条WHERE子句。如果想这样做，使用mysql客户程序的&#8211;i-am-a-dummy选项。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>二十九、MySQL各种锁定 </p>
<p>内部表锁定<br />LOCK TABLES（所有表类型适用）<br />GET LOCK()/RELEASE LOCK()<br />页面锁定（对BDB表）<br />ALTER TABLE也在BDB表上进行表锁定<br />LOCK TABLES允许一个表有多个读者和一个写者。<br />一般WHERE锁定具有比READ锁定高的优先级以避免让写入方干等。对于不重要的写入方，可以使用LOW_PRIORITY关键字让锁定处理器优选读取方。<br />UPDATE LOW_PRIORITY SET value=10 WHERE id=10; </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三十、给MySQL更多信息以更好地解决问题的技巧 注意你总能去掉(加注释)MySQL功能以使查询可移植： </p>
<p>SELECT /*! SQL_BUFFER_RESULTS */ &#8230;<br />SELECT SQL_BUFFER_RESULTS &#8230;<br />将强制MySQL生成一个临时结果集。只要所有临时结果集生成后，所有表上的锁定均被释放。这能在遇到表锁定问题时或要花很长时间将结果传给客户端时有所帮助。<br />SELECT SQL_SMALL_RESULT &#8230; GROUP BY &#8230;<br />告诉优化器结果集将只包含很少的行。<br />SELECT SQL_BIG_RESULT &#8230; GROUP BY &#8230;<br />告诉优化器结果集将包含很多行。<br />SELECT STRAIGHT_JOIN &#8230;<br />强制优化器以出现在FROM子句中的次序联结表。<br />SELECT &#8230; FROM table_name [USE INDEX (index_list) | IGNORE INDEX (index_list)] table_name2<br />强制MySQL使用/忽略列出的索引。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三十一、事务的例子 </p>
<p>MyIASM表如何进行事务处理:<br />mysql&gt; LOCK TABLES trans READ, customer WRITE;<br />mysql&gt; select sum(value) from trans where customer_id=some_id;<br />mysql&gt; update customer set total_value=sum_from_previous_statement<br />where customer_id=some_id;<br />mysql&gt; UNLOCK TABLES;<br />BDB表如何进行事务:<br />mysql&gt; BEGIN WORK;<br />mysql&gt; select sum(value) from trans where customer_id=some_id;<br />mysql&gt; update customer set total_value=sum_from_previous_statement<br />where customer_id=some_id;<br />mysql&gt; COMMIT;<br />注意你可以通过下列语句回避事务:<br />UPDATE customer SET value=value+new_value WHERE customer_id=some_id; </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三十二、使用REPLACE的例子 </p>
<p>REPLACE的功能极像INSERT，除了如果一条老记录在一个唯一索引上具有与新纪录相同的值，那么老记录在新纪录插入前则被删除。不使用 SELECT 1 FROM t1 WHERE key=#<br />IF found-row<br />LOCK TABLES t1<br />DELETE FROM t1 WHERE key1=#<br />INSERT INTO t1 VALUES (&#8230;)<br />UNLOCK TABLES t1;<br />ENDIF<br />而用<br />REPLACE INTO t1 VALUES (&#8230;) </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三十三、一般技巧 </p>
<p>使用短主键。联结表时使用数字而非字符串。<br />当使用多部分键码时，第一部分应该时最常用的部分。<br />有疑问时，首先使用更多重复的列以获得更好地键码压缩。<br />如果在同一台机器上运行MySQL客户和服务器，那么在连接MySQL时则使用套接字而不是TCP/IP（这可以提高性能7.5%）。可在连接MySQL服务器时不指定主机名或主机名为localhost来做到。<br />如果可能，使用&#8211;skip-locking(在某些OS上为默认)，这将关闭外部锁定并将提高性能。<br />使用应用层哈希值而非长键码：<br />SELECT * FROM table_name WHERE hash=MD5(concat(col1,col2)) AND<br />col_1=&#8217;constant&#8217; AND col_2=&#8217;constant&#8217;<br />在文件中保存需要以文件形式访问的BLOB，在数据库中只保存文件名。<br />删除所有行比删除一大部分行要快。<br />如果SQL不够快，研究一下访问数据的较底层接口。 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三十四、使用MySQL 3.23的好处 </p>
<p>MyISAM：可移植的大表格式<br />HEAP：内存中的表<br />Berkeley DB：支持事务的表。<br />众多提高的限制<br />动态字符集<br />更多的STATUS变量<br />CHECK和REPAIR表<br />更快的GROUP BY和DISTINCT<br />LEFT JOIN &#8230; IF NULL的优化<br />CREATE TABLE &#8230; SELECT<br />CREATE TEMPORARY table_name (&#8230;)<br />临时HEAP表到MyISAM表的自动转换<br />复制<br />mysqlhotcopy脚本 </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>三十五、正在积极开发的重要功能 </p>
<p>改进事务处理<br />失败安全的复制<br />正文搜索<br />多个表的删除(之后完成多个表的更新)<br />更好的键码缓存<br />原子RENAME (RENAME TABLE foo as foo_old, foo_new as foo)<br />查询高速缓存<br />MERGE TABLES<br />一个更好的GUI客户程序</p>
<p>&nbsp;</p>
<p>来源：<a href="http://www.imysql.cn/?q=node/22">http://www.imysql.cn/?q=node/22</a></p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://observerlife.com/mysql%e6%9f%a5%e8%af%a2%e4%bc%98%e5%8c%96%e7%b3%bb%e5%88%97%e8%ae%b2%e5%ba%a7%e4%b9%8b%e6%9f%a5%e8%af%a2%e4%bc%98%e5%8c%96%e5%99%a8%e4%b8%80/" rel="bookmark" class="crp_title">MySQL查询优化系列讲座之查询优化器(一)</a></li><li><a href="http://observerlife.com/mysql5-4%e7%9a%84%e6%94%b9%e8%bf%9b/" rel="bookmark" class="crp_title">MySQL5.4的改进</a></li><li><a href="http://observerlife.com/mysql%e6%95%b0%e6%8d%ae%e7%9a%84%e5%af%bc%e5%87%ba%e5%92%8c%e5%af%bc%e5%85%a5%e5%b7%a5%e5%85%b7mysqldump/" rel="bookmark" class="crp_title">MySQL数据的导出和导入工具:mysqldump</a></li><li><a href="http://observerlife.com/firefox%e5%92%8cie%e4%b8%8bdisplay%e5%b1%9e%e6%80%a7%e4%b8%8d%e5%85%bc%e5%ae%b9%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/" rel="bookmark" class="crp_title">Firefox和IE下display属性不兼容的解决办法</a></li><li><a href="http://observerlife.com/vim-quick-reference-card/" rel="bookmark" class="crp_title">VIM QUICK REFERENCE CARD</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://observerlife.com/mysql%e7%9a%84%e4%bc%98%e5%8c%96zt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
