<?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>我想网 &#187; Mysql</title>
	<atom:link href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iwanna.cn</link>
	<description></description>
	<lastBuildDate>Sat, 31 Jul 2010 15:12:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>如何释放已删除的InnoDB磁盘空间</title>
		<link>http://www.iwanna.cn/archives/2010/07/06/4378/</link>
		<comments>http://www.iwanna.cn/archives/2010/07/06/4378/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 04:13:37 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/archives/2010/07/06/4378/</guid>
		<description><![CDATA[Innodb数据库对于已经删除的数据只是标记为删除，并不真正释放所占用的磁盘空间，这就导致InnoDB数据库文件不断增长。如果想彻底释放这些已经 删除的数据，需要把数据库导出，删除InnoDB数据库文件，然后再倒入。 下面是基本的步骤：
1 使用mysqldump命令将InnoDB数据库导出
2 停止MySQL
3 删除所有InnoDB数据库文件和日志
4 启动MySQL并自动重建InnoDB数据库文件和日志文件
5 导入前面备份的数据库文件
有一点要注意，你配置了MySQL数据库复制，当你导入数据库备份文件的时候，所有的Query都可能会被写入Binlog,可以执行SET  SQL_LOG_BIN = 0;暂时停止Binlog的写入。
还有一种方式是在创建数据库的时候设置innodb_file_per_table，这样InnoDB会对每个表创建一个数据文件，然后只需要运 行OPTIMIZE TABLE 命令就可以释放所有已经删除的磁盘空间。

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：MySQL, Mysql

	您可能会感兴趣的其他文章
	
	提高MySQL 查询效率的三个技巧 
	使用参数化查询防止SQL注入漏洞 
	你可能不知道的MySQL 
	Web应用中的轻量级消息队列-MySQL 
	Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) 
	MySQL语句优化的原则 
	MySql索引优化注意 
	MySQL最好的优化技巧 
	mysql日期和时间格式转换 
	MySQL-Front v5 注册码,注册机。 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>Innodb数据库对于已经删除的数据只是标记为删除，并不真正释放所占用的磁盘空间，这就导致InnoDB数据库文件不断增长。如果想彻底释放这些已经 删除的数据，需要把数据库导出，删除InnoDB数据库文件，然后再倒入。 下面是基本的步骤：</p>
<p>1 使用mysqldump命令将InnoDB数据库导出</p>
<p>2 停止MySQL</p>
<p>3 删除所有InnoDB数据库文件和日志</p>
<p>4 启动MySQL并自动重建InnoDB数据库文件和日志文件</p>
<p>5 导入前面备份的数据库文件</p>
<p>有一点要注意，你配置了MySQL数据库复制，当你导入数据库备份文件的时候，所有的Query都可能会被写入Binlog,可以执行SET  SQL_LOG_BIN = 0;暂时停止Binlog的写入。</p>
<p>还有一种方式是在创建数据库的时候设置innodb_file_per_table，这样InnoDB会对每个表创建一个数据文件，然后只需要运 行OPTIMIZE TABLE 命令就可以释放所有已经删除的磁盘空间。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/07/06/4378/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/07/06/4378/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/07/06/4378/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/07/06/4378/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/07/06/4378/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/14/3981/" title="MySQL-Front v5 注册码,注册机。 (2010年06月14日)">MySQL-Front v5 注册码,注册机。</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/07/06/4378/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL-Front v5 注册码,注册机。</title>
		<link>http://www.iwanna.cn/archives/2010/06/14/3981/</link>
		<comments>http://www.iwanna.cn/archives/2010/06/14/3981/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 07:55:52 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3981</guid>
		<description><![CDATA[在MySQL-Front v5.0 build 1.126下测试通过。
NAME:xok.la
Key:
e1Ns2izlxZwu9Lb4X8qlcWGoxQpUU+hI
8CsVahbbMjpH2F5PfAgosxzjGhATkWJu
UsE8QXsqfZ5iSs9yM7D2XMOUVFpKud9K
2977pO7s1Efi72iGWxUn+209a6tulHkq
5cgLtLSpWsK7uvsOeG4UgYZoRnbp+0T4
PJEplfQk9YpMfY9yYJG+NOUbvM1+kMcf
CWd9iq3AZHrFHTm5qpSWEiJamTtIpyAD
4UuLXoNyojh5Ne0S6SWxxUJsUQS3DStB
o/e0aVBzhRwmrtvg4QdUIg==
注册机下载：/file/2009/03/MySQL-Front5_key.rar

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：MySQL, Mysql

	您可能会感兴趣的其他文章
	
	提高MySQL 查询效率的三个技巧 
	如何释放已删除的InnoDB磁盘空间 
	使用参数化查询防止SQL注入漏洞 
	你可能不知道的MySQL 
	Web应用中的轻量级消息队列-MySQL 
	Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) 
	MySQL语句优化的原则 
	MySql索引优化注意 
	MySQL最好的优化技巧 
	mysql日期和时间格式转换 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>在MySQL-Front v5.0 build 1.126下测试通过。</p>
<p>NAME:xok.la</p>
<p>Key:</p>
<p>e1Ns2izlxZwu9Lb4X8qlcWGoxQpUU+hI<br />
8CsVahbbMjpH2F5PfAgosxzjGhATkWJu<br />
UsE8QXsqfZ5iSs9yM7D2XMOUVFpKud9K<br />
2977pO7s1Efi72iGWxUn+209a6tulHkq<br />
5cgLtLSpWsK7uvsOeG4UgYZoRnbp+0T4<br />
PJEplfQk9YpMfY9yYJG+NOUbvM1+kMcf<br />
CWd9iq3AZHrFHTm5qpSWEiJamTtIpyAD<br />
4UuLXoNyojh5Ne0S6SWxxUJsUQS3DStB<br />
o/e0aVBzhRwmrtvg4QdUIg==</p>
<p>注册机下载：<a href="http://xok.la/file/2009/03/MySQL-Front5_key.rar" target="_blank">/file/2009/03/MySQL-Front5_key.rar</a></p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/06/14/3981/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/06/14/3981/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/06/14/3981/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/06/14/3981/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/06/14/3981/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/06/14/3981/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用参数化查询防止SQL注入漏洞</title>
		<link>http://www.iwanna.cn/archives/2010/06/03/3657/</link>
		<comments>http://www.iwanna.cn/archives/2010/06/03/3657/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 15:31:06 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[程序源码]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3657</guid>
		<description><![CDATA[SQL注入漏洞曾经是Web应用程序的噩梦，CMS、BBS、Blog无一不曾受其害。
SQL注入的原理
以往在Web应用程序访问数据库时一般是采取拼接字符串的形式，比如登录的时候就是根据用户名和密码去查询：
string sql = "SELECT TOP 1 * FROM [User] WHERE UserName = ‘” +  userName + “‘ AND Password = ‘” + password + “‘”;
其中userName和password两个变量的值是由用户输入的。在userName和password都合法的情况下，这自然没有问题，但是 用户输入是不可信的，一些恶意用户只要用一些技巧，就可以绕过用户名、密码登录。
假设password的值是”1′ or ‘1′ = ‘1“，userName的值随便取，比如是”abc”，那变量sql的 值就是：

"SELECT TOP 1 * FROM [User] WHERE UserName = ‘abc’ AND Password  = ‘1′ or ‘1′ = ‘1′”
由于’1′ =  ‘1′恒为真，因此只要User表中有数据，不管UserName、Password的值是否匹配，这条SQL命令准能查出记录来。就这样，登录系统就被 破解了。
以往的防御方式
以前对付这种漏洞的方式主要有三种：

字符串检测：限定内容只能由英文、数字等常规字符，如果检查到用户输入有特殊字符，直接拒绝。但缺点是，系统 中不可避免地会有些内容包含特殊字符，这时候总不能拒绝入库。
字符串替换：把危险字符替换成其他字符，缺点是危险字符可能有很多，一一枚举替换相当麻烦，也可能有漏网之 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>注入漏洞曾经是Web应用程序的噩梦，CMS、BBS、Blog无一不曾受其害。</p>
<h3><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>注入的原理</h3>
<p>以往在Web应用程序访问数据库时一般是采取<strong>拼接字符串</strong>的形式，比如登录的时候就是根据用户名和密码去查询：</p>
<p><code>string <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a> = "SELECT TOP 1 * FROM [User] WHERE UserName = ‘” +  userName + “‘ AND Password = ‘” + password + “‘”;</code></p>
<p>其中userName和password两个变量的值是由用户输入的。在userName和password都合法的情况下，这自然没有问题，但是 用户输入是不可信的，一些恶意用户只要用一些技巧，就可以绕过用户名、密码登录。</p>
<p>假设password的值是”<em>1′ or ‘1′ = ‘1</em>“，userName的值随便取，比如是”abc”，那变量<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>的 值就是：<br />
<span id="more-3657"></span><br />
<code>"SELECT TOP 1 * FROM [User] WHERE UserName = ‘abc’ AND Password  = ‘1′ or ‘1′ = ‘1′”</code></p>
<p>由于’1′ =  ‘1′恒为真，因此只要User表中有数据，不管UserName、Password的值是否匹配，这条<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>命令准能查出记录来。就这样，登录系统就被 破解了。</p>
<h3>以往的防御方式</h3>
<p>以前对付这种漏洞的方式主要有三种：</p>
<ul>
<li><strong>字符串检测</strong>：限定内容只能由英文、数字等常规字符，如果检查到用户输入有特殊字符，直接拒绝。但缺点是，系统 中不可避免地会有些内容包含特殊字符，这时候总不能拒绝入库。</li>
<li><strong>字符串替换</strong>：把危险字符替换成其他字符，缺点是危险字符可能有很多，一一枚举替换相当麻烦，也可能有漏网之 鱼。</li>
<li><strong>存储过程</strong>：把参数传到存储过程进行处理，但并不是所有数据库都支持存储过程。如果存储过程中执行的命令也是通 过拼接字符串出来的，还是会有漏洞。</li>
</ul>
<h3>参数化查询</h3>
<p>近年来，自从参数化查询出现后，<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>注入漏洞已成明日黄花。</p>
<p>参数化查询（Parameterized Query 或 Parameterized  Statement）是访问数据库时，在需要填入数值或数据的地方，使用参数 (Parameter) 来给值。</p>
<p>在使用参数化查询的情况下，数据库服务器不会将参数的内容视为<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>指令的一部份来处理，而是在<strong>数据库完成<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>指令的编译后，才 套用参数运行</strong>，因此就算参数中含有指令，也不会被数据库运行。Access、<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  Server、MySQL、SQLite等常用数据库都支持参数化查询。</p>
<h4>在ASP程序中使用参数化查询</h4>
<p>ASP环境下的参数化查询主要由<strong>Connection对象</strong>和<strong>Command对象</strong>完 成。</p>
<p>Access数据库只支持匿名参数，在传入参数的位置用问号代替即可。<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  Server数据库虽然支持匿名和非匿名的参数，但是在ASP中也仅能使用匿名参数。</p>
<p><code>var conn = Server.CreateObject("ADODB.Connection");<br />
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  Server.MapPath("Test.mdb");<br />
conn.Open();</code></p>
<p>var cmd = Server.CreateObject(&#8220;ADODB.Command&#8221;);<br />
cmd.ActiveConnection = conn;<br />
cmd.CommandType = 1;<br />
cmd.CommandText = &#8220;SELECT TOP 1 * FROM [User] WHERE <strong>UserName = ?  AND Password = ?</strong>“;<br />
cmd.Parameters.Append(cmd.CreateParameter(”@UserName”, 200, 1, 20,  “user01″));<br />
cmd.Parameters.Append(cmd.CreateParameter(”@Password”, 200, 1, 16,  “123456″));</p>
<p>var rs = cmd.Execute();<br />
Response.Write(rs(”UserId”).value);</p>
<p>rs.Close();<br />
conn.Close();</p>
<h4>在ASP<a href="http://www.iwanna.cn/tags/net/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with .Net">.NET</a>程序中使用参数化查询</h4>
<p>ASP<a href="http://www.iwanna.cn/tags/net/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with .Net">.NET</a>环境下的查询化查询也是通过Connection对象和Command对象完成。如果数据库是<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  Server，就可以用有名字的参数了，格式是<strong>“@”字符加上参数名</strong>。</p>
<p><code>SqlConnection conn = new  SqlConnection("server=(local)\\SQL2005;user id=sa;pwd=12345;initial  catalog=TestDb");<br />
conn.Open();</code></p>
<p>SqlCommand cmd = new SqlCommand(&#8220;SELECT TOP 1 * FROM [User] WHERE <strong>UserName  = @UserName AND Password = @Password</strong>“);<br />
cmd.Connection = conn;<br />
cmd.Parameters.AddWithValue(”UserName”, “user01″);<br />
cmd.Parameters.AddWithValue(”Password”, “123456″);</p>
<p>SqlDataReader reader = cmd.ExecuteReader();<br />
reader.Read();<br />
int userId = reader.GetInt32(0);</p>
<p>reader.Close();<br />
conn.Close();</p>
<p>MySQL的参数格式与<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Server有点区别，是以<strong>“?”加上参数名</strong>。</p>
<p><code>MySqlConnection conn = new  MySqlConnection("server=127.0.0.1;uid=root;pwd=12345;database=test;");<br />
conn.Open();</code></p>
<p>MySqlCommand cmd = new MySqlCommand(&#8220;SELECT * FROM `User` WHERE <strong>UserName  = ?UserName AND Password = ?Password</strong> LIMIT 1″);<br />
cmd.Connection = conn;<br />
cmd.Parameters.AddWithValue(”UserName”, “user01″);<br />
cmd.Parameters.AddWithValue(”Password”, “123456″);</p>
<p>MySqlDataReader reader = cmd.ExecuteReader();<br />
reader.Read();<br />
int userId = reader.GetInt32(0);</p>
<p>reader.Close();<br />
conn.Close();</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/06/03/3657/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/06/03/3657/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/06/03/3657/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/06/03/3657/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/06/03/3657/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/net/" title=".Net" rel="tag nofollow">.Net</a>, <a href="http://www.iwanna.cn/tags/net/" title=".Net" rel="tag nofollow">.Net</a>, <a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a>, <a href="http://www.iwanna.cn/topics/develope/sql/" title="Sql" rel="tag nofollow">Sql</a>, <a href="http://www.iwanna.cn/tags/sql/" title="Sql" rel="tag nofollow">Sql</a>, <a href="http://www.iwanna.cn/topics/resource/" title="程序源码" rel="tag nofollow">程序源码</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/03/30/11/" title="MySQL 搜索中的大小写敏感性 (2009年03月30日)">MySQL 搜索中的大小写敏感性</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/30/1894/" title="40+ Web前端开发必备的备忘单[上] (2009年06月30日)">40+ Web前端开发必备的备忘单[上]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/12/3089/" title="19条 WordPress 实用的 SQL 查询语句 (2010年05月12日)">19条 WordPress 实用的 SQL 查询语句</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/02/149/" title="设计模式之单例模式 (2009年04月2日)">设计模式之单例模式</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/08/240/" title="常用的数据库统计SQL语句(2) (2009年04月8日)">常用的数据库统计SQL语句(2)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/08/236/" title="常用的一些数据统计SQL语句 (2009年04月8日)">常用的一些数据统计SQL语句</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4523/" title="图解Linux下如何搭建C#开发环境 (2010年07月13日)">图解Linux下如何搭建C#开发环境</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/03/29/2607/" title="关于数据大容量的导入导出小结[SQL Server] (2010年03月29日)">关于数据大容量的导入导出小结[SQL Server]</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/06/03/3657/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10款最好MySQL GUI的工具</title>
		<link>http://www.iwanna.cn/archives/2010/05/17/3189/</link>
		<comments>http://www.iwanna.cn/archives/2010/05/17/3189/#comments</comments>
		<pubDate>Mon, 17 May 2010 13:48:36 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[TableSoft]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3189</guid>
		<description><![CDATA[板凳注：在日常开发过程中，其实我更偏爱使用 MySQL-Front 这款GUI工具，使用起来决不亚于Navicat，尤其是在更加字段值过滤数据时，相当便捷。
这款软件也是收费的，所幸的是，她也有提供30天的试用。
接下去请看 Rob  Gravelle 推荐的10款最好MySQL GUI的工具。
绝大多数的关系数据库都明显不同于MS  Access，它们都有两个截然不同的部分：后端作为数据仓库，前端作为用于数据组件通信的用户界面。这种设计非常巧妙，它并行处理两层编程模型，将数据 层从用户界面中分离出来，同时运行数据库软件制造商专注于它们的产品强项：数据存储和管理。它同时为第三方创建大量的应用程序提供了便利，使各种数据库间 的交互性更强。这类产品包括Embarcadero Rapid SQL和Oracle SQL  Developer。这里有十款优秀的MySQL图形化界面。
1. Workbench
制造商：Sun Systems/Oracle
网站：http://dev.mysql.com/downloads/workbench/
价格：免费
许可证：GPL License
支持平台：Microsoft Windows，Mac OS X，Linux


MySQL  Workbench是一款图形化的数据库设计工具，它在一个开发环境中集成了SQL的开发，管理，数据库设计，创建以及维护。它是 fabFORCE.net旗下DBDesigner 4的继承者，并替代了MySQL GUI Tools  Bundle。当前版本是5.2，最早版本是5.0，这是为了强调MySQL  Workbench是作为DBDesigner4的继承者被开发出来的事实。
2. Navicat
制造商：PremiumSoft ™ CyberTech Ltd.
网站：http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html
价格：如下所示：



Windows Edition ( Non-Commercial )
US $209 (disk)


US $199 (download)


Windows Edition
US $379 (disk)


US $369 (download)


Mac OS X Edition ( Non-Commercial [...]]]></description>
			<content:encoded><![CDATA[<p>板凳注：在日常开发过程中，其实我更偏爱使用 MySQL-Front 这款GUI工具，使用起来决不亚于Navicat，尤其是在更加字段值过滤数据时，相当便捷。<br />
这款软件也是收费的，所幸的是，她也有提供30天的试用。</p>
<p>接下去请看 <span style="font-family: Verdana,Arial,Helvetica,sans-serif;"><strong><a href="http://www.databasejournal.com/feedback.php/http://www.databasejournal.com/features/mysql/article.php/3880961">Rob  Gravelle</a> </strong></span>推荐的<strong><a href="http://www.iwanna.cn/archives/2010/05/17/3189/" title="10款最好MySQL GUI的工具">10款最好MySQL GUI的工具</a></strong>。</p>
<p>绝大多数的关系数据库都明显不同于MS  Access，它们都有两个截然不同的部分：后端作为数据仓库，前端作为用于数据组件通信的用户界面。这种设计非常巧妙，它并行处理两层编程模型，将数据 层从用户界面中分离出来，同时运行数据库软件制造商专注于它们的产品强项：数据存储和管理。它同时为第三方创建大量的应用程序提供了便利，使各种数据库间 的交互性更强。这类产品包括Embarcadero Rapid <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>和Oracle <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  Developer。这里有十款优秀的MySQL图形化界面。</p>
<h3>1. Workbench</h3>
<p>制造商：Sun Systems/Oracle<br />
网站：<a href="http://dev.mysql.com/downloads/workbench/" target="_blank">http://dev.mysql.com/downloads/workbench/</a><br />
价格：免费<br />
许可证：GPL License<br />
支持平台：Microsoft Windows，Mac OS X，Linux<br />
<span id="more-3189"></span><br />
<img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image001.jpg" border="0" alt="MySQL Workbench" width="400" height="311" /></p>
<p>MySQL  Workbench是一款图形化的数据库设计工具，它在一个开发环境中集成了<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>的开发，管理，数据库设计，创建以及维护。它是 fabFORCE<a href="http://www.iwanna.cn/tags/net/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with .Net">.net</a>旗下DBDesigner 4的继承者，并替代了MySQL GUI Tools  Bundle。当前版本是5.2，最早版本是5.0，这是为了强调MySQL  Workbench是作为DBDesigner4的继承者被开发出来的事实。</p>
<h3>2. Navicat</h3>
<p>制造商：PremiumSoft ™ CyberTech Ltd.<br />
网站：<a href="http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html" target="_blank">http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html</a><br />
价格：如下所示：</p>
<table border="1" cellspacing="0" cellpadding="3" width="387">
<tbody>
<tr>
<td rowspan="2" width="236">Windows Edition ( Non-Commercial )</td>
<td width="151">US $209 (disk)</td>
</tr>
<tr>
<td width="151">US $199 (download)</td>
</tr>
<tr>
<td rowspan="2" width="236">Windows Edition</td>
<td width="151">US $379 (disk)</td>
</tr>
<tr>
<td width="151">US $369 (download)</td>
</tr>
<tr>
<td rowspan="2" width="236">Mac OS X Edition ( Non-Commercial )</td>
<td width="151">US $209 (disk)</td>
</tr>
<tr>
<td width="151">US $199 (download)</td>
</tr>
<tr>
<td rowspan="2" width="236">Mac OS X Edition</td>
<td width="151">US $329 (disk)</td>
</tr>
<tr>
<td width="151">US $319 (download)</td>
</tr>
<tr>
<td rowspan="2" width="236">Linux Edition ( Non-Commercial )</td>
<td width="151">US $189 (disk)</td>
</tr>
<tr>
<td width="151">US $179 (download)</td>
</tr>
<tr>
<td rowspan="2" width="236">Linux Edition</td>
<td width="151">US $329 (disk)</td>
</tr>
<tr>
<td width="151">US $319 (download)</td>
</tr>
</tbody>
</table>
<p>配有30天试用版。<br />
许可证：Commercial 或 Non-commercial licenses.<br />
支持平台：Microsoft Windows，Mac OS X，Linux</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image002.jpg" border="0" alt="Navicat for MySQL" width="500" height="366" /></p>
<p>用于MySQL的Navicat既是一个数据库管理器同时还是一个开发工具。它适用于从3.21以上的任何MySQL数据库服务器，并且支持包括触 发器，存储过程，函数，事件，预览和用户管理在内的绝大多数最新的MySQL功能。</p>
<p>Navicat的功能非常复杂，足以满足专业开发人员的各种特殊需求，同时对于MySQL新手来说也非常简单易学。</p>
<h3>3. Sequel Pro</h3>
<p>制造商：The Sequel Pro Project（开源）<br />
网站：<a href="http://www.sequelpro.com/" target="_blank">http://www.sequelpro.com/</a><br />
价格：免费（接受通过PayPal的捐赠）<br />
许可证：GNU GPL 2.0<br />
支持平台：Mac OS X Tiger Universal Build</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image003.jpg" border="0" alt="Sequel Pro" width="550" height="322" /></p>
<p>Sequel Pro是一款免费的开源程序。它是CocoaMySQL Mac数据库管理程序的继承者。CocoaMySQL是Lorenz  Textor的新构想，他是CocoaMySQL的早期的（2003年）主要开发人员。</p>
<p>Sequel  Pro用于管理MySQL数据库（本地或在Internet上）。您可以使用它来添加删除数据库和表，修改字段和索引，预览和过滤表的内容，添加编辑删除 行，执行自定义查询，转储表或整个数据库。</p>
<p>它兼容MySQL 3.x，4，5。</p>
<h3>4. HeidiSQL</h3>
<p>制造商：Ansgar Becker<br />
网站：<a href="http://www.heidisql.com/" target="_blank">http://www.heidisql.com/</a><br />
价格：免费（接受通过PayPal的捐赠）<br />
许可证：GNU General Public License<br />
支持平台：Windows 2000，XP，Vista，7（可通过Wine运行于任何Linux之上）</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image004.gif" border="0" alt="HeidiSQL" width="400" height="270" /></p>
<p>之前被称为MySQL-Front的HeidiSQL是一款免费的开源客户端，由德国程序员Ansgar  Becker开发，同时还得到了一些Delphi贡献者的帮助。用户必须通过许可证书创建一个会话登陆本地或远程MySQL服务器，才可以使用 HeidiSQL管理数据库。通过这个会话，用户可以管理所链接的MySQL服务器的MySQL数据库，并在完成之后断开。它的功能集足够应付绝大多数常 见和高级数据库，表，数据记录选项，但是目前还处于积极的开发中，以求能实现MySQL前端的所有功能。</p>
<p>另外还有一款由Java编写的jHeidi，它被设计用于Mac和Linux计算机。遗憾的是，该项目已于2010年3月终止了。</p>
<h3>5. phpMyAdmin</h3>
<p>制造商：The phpMyAdmin Project (on Sourceforge)<br />
网站：<a href="http://www.phpmyadmin.net/home_page/" target="_blank">http://www.phpmyadmin.net/home_page/</a><br />
价格：免费（接受通过PayPal的捐赠）<br />
许可证：GNU General Public License, version 2<br />
支持平台：Microsoft Windows，Mac OS X，Linux，PHP 4 &#8211; 5，MySQL 3 &#8211; 5</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image005.gif" border="0" alt="phpMyAdmin" width="660" height="363" /></p>
<p>PhpMyAdmin是一款免费的软件工具，采用PHP编写，用于在线处理MySQL管理。PhpMyAdmin支持多种MySQL操作，最常用的 操作包括管理数据库，表，字段，关系，索引，用户，权限。同时还允许您直接执行<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句。</p>
<p>Tobias Ratschiller曾经是IT顾问，后来创建了Maguma软件公司。由于受到Peter  Kuppelwieser开发的MySQL-Webadmin的影响，于1998年开始了基于PHP的MySQL的web前端开发。因时间不足，他与 2000年放弃了该项目（以及同样有他开发的phpAdsNew）。就在那时，phpMyAdmin已成为最受欢迎的PHP程序和MySQL管理工具之 一，它拥有广泛的社区用户和贡献者。为了协调越来越多的补丁，Olivier Müller，Marc Delisle以及Loïc  Chapeaux三位开发人员在注册 SourceForge<a href="http://www.iwanna.cn/tags/net/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with .Net">.net</a>注册了phpMyAdmin项目，并于2001年接手开发工作。</p>
<h3>6. <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Maestro MySQL Tools Family</h3>
<p>制造商：<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Maestro Group<br />
网站：<a href="http://www.sqlmaestro.com/products/mysql/" target="_blank">http://www.sqlmaestro.com/products/mysql/</a><br />
价格：范围从$99的非商业程序到$1949的MySQL Admin Tools  Bundle，其中包括完整的网站商业许可证外加3年升级。捆绑包中包括了<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  Maestro，Data Wizard，Code Factory，Service Center以及PHP Generator Pro。<br />
许可证：全范围支持从单独的非商业到附带3年免费升级的站点商业许可证<br />
支持平台：Windows 2000，XP，Vista，7</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image006.gif" border="0" alt="SQL Maestro MySQL Tools Family" width="377" height="312" /></p>
<p><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Maestro  Group提供了完整的数据库管理，开发和管理工具，适用于所有主流DBMS。通过GUI界面，您可以执行查询和<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>脚本，管理用户以及他们的特权，导 入，导出到处和数据备份。同时，您还可以为所选定的表以及查询生成PHP脚本，并转移任何ADO兼容数据库到MySQL数据库。</p>
<p>捆绑包中包括：</p>
<p><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Maestro for MySQL<br />
专业的MySQL GUI管理工具，支持所有最新的MySQL 5.0和5.1。功能包括预览，过程，触发器和表分区。</p>
<p>Data Wizard for MySQL<br />
MySQL的转储，以及数据导出/导入工具等。</p>
<p>Code Factory for MySQL<br />
用于编辑<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>脚本和创建<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句的可视化工具集。</p>
<p>Service Center for MySQL<br />
用于MySQL服务器维护。</p>
<p>PHP Generator for MySQL<br />
生成高性能MySQL PHP脚本。配有免费版本。</p>
<h3>7. SQLWave</h3>
<p>制造商：Nerocode<br />
网站：<a href="http://www.nerocode.com/" target="_blank">http://www.nerocode.com/</a><br />
价格：$99.00<br />
许可证：shareware。查看<a href="http://www.nerocode.com/license.txt" target="_blank">http://www.nerocode.com/license.txt</a>以获得更多相关信息。<br />
支持平台：Windows 2000，XP，Vista，7</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image007.jpg" border="0" alt="SQLWave" width="280" height="195" /></p>
<p>Nerocode SQLWave是一款MySQL  GUI客户端工具，被设计用来自动化和简化数据库的开发进程。它同时还提供了更简便的方法来开拓和维护现有数据库，以及不同方式来设计复杂<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句，查 询和数据操作。兼容MySQL 4.x &#8211; 6.x。</p>
<p>配有30天试用版。</p>
<h3>8. dbForge Studio</h3>
<p>制造商：devart<br />
网站：<a href="http://www.devart.com/dbforge/mysql/studio/" target="_blank">http://www.devart.com/dbforge/mysql/studio/</a><br />
价格：免费的Express版，$49.95（非商业标准版），$99.99（非商业专业版）。<br />
许可证：商业和非商业许可证。提供订阅这一高效快速的方法来实现产品升级和技术支持。<br />
支持平台：Windows 2000，XP，Vista，7</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image008.jpg" border="0" alt="dbForge Studio" width="600" height="308" /></p>
<p>用于MySQL的DbForge Studio提供了图形化的MySQL开发和管理。</p>
<p>有三个版本：Express，Standard，Professional。</p>
<p>Express是免费应用程序，提供用于架构对象，用户账户，<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>脚本和查询的基本功能。</p>
<p>Standard为数据库管理员和开发者提供了附加工具，比如debugger，Query  Builder，代码模板，对象检索，各种输出和维护向导。</p>
<p>Professional是全功能版本并添加了以下设计：数据库项目，对数据库结构（架构比较）或数据库内容（数据比较）进行准确的比较和同步，调 试已存储的过程和脚本，创建复杂查询。</p>
<p>dbForge的其他工具包括：</p>
<p>Schema Compare for MySQL</p>
<p>Data Compare for MySQL</p>
<p>Query Builder for MySQL</p>
<p>Fusion for MySQL</p>
<h3>9. DBTools Manager</h3>
<p>制造商：DBTools Software<br />
网站：<a href="http://www.dbtools.com.br/EN/dbmanagerpro/" target="_blank">http://www.dbtools.com.br/EN/dbmanagerpro/</a><br />
价格：标准版免费。单一授权的企业版为$69.90 USD。Discounts版适用于所中许可证。<br />
许可：标准版授权于标准免费软件条件。企业版授权于销售单位。<br />
支持平台：Windows 2000，XP，Vista，7</p>
<p><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image009.jpg" border="0" alt="DBTools" width="500" height="358" /></p>
<p>标准版<br />
特别为个人使用设计，它配备最低限功能，适用于数据库新手执行基本的数据库管理。您可以在非商业的前提下免费使用它。如果用于商业使用，您可以购买授权， 同时还将提供额外功能。</p>
<p>企业版<br />
特别为企业使用设计，它更适用于那些寻找集成化数据库管理程序的DBA和开发人员。购买前，您可以先试用。企业版的试用版是全功能的，您有20天的时间进 行所有的尝试，同时基于完整的体验来决定是否购买。</p>
<p>同时支持MySQL 3，4，5。</p>
<h3>10. MyDB Studio</h3>
<p>制造商：<strong>H2LSoft, Inc.</strong><br />
网站：<a href="http://www.mydb-studio.com/" target="_blank">http://www.mydb-studio.com/</a><br />
价格：免费<br />
授权：免费软件<br />
支持平台：Windows 2000，XP，Vista，7</p>
<p><a href="http://www.mydb-studio.com/"><img src="http://i709.photobucket.com/albums/ww92/zsmin/iwanna/Article/201005/rg_MySQL_GUI_image010.jpg" border="0" alt="MyDB Studio" width="480" height="213" /></a></p>
<p>MyDB  Studio包含了用于MySQL服务器管理的完整工具集。它可用于创建/编辑/放弃数据库对象，数据库同步，以及数据导出/导入。数据库管理员还可以用 它来执行数据库转移，以及备份和还原。它支持使用SSH隧道来保护您的链接，即便您的主机不允许远程访问链接，用户和权限管理，以及PHP脚本创建，您依 然可以进行连接。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/05/17/3189/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/05/17/3189/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/05/17/3189/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/05/17/3189/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/05/17/3189/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a>, <a href="http://www.iwanna.cn/topics/software/table-soft/" title="TableSoft" rel="tag nofollow">TableSoft</a>, <a href="http://www.iwanna.cn/topics/software/tool/" title="Tool" rel="tag nofollow">Tool</a>, <a href="http://www.iwanna.cn/tags/tool/" title="Tool" rel="tag nofollow">Tool</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/06/30/1894/" title="40+ Web前端开发必备的备忘单[上] (2009年06月30日)">40+ Web前端开发必备的备忘单[上]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/19/4628/" title="美化你的Google阅读器 (2010年07月19日)">美化你的Google阅读器</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/01/1900/" title="网页鼠标点击轨迹热图跟踪软件-ClickHeat (2009年07月1日)">网页鼠标点击轨迹热图跟踪软件-ClickHeat</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/09/2274/" title="替代微软Visio的免费开源软件：DIA (2009年10月9日)">替代微软Visio的免费开源软件：DIA</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/28/3530/" title="数据之美之50个数据图形化工具(下) (2010年05月28日)">数据之美之50个数据图形化工具(下)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/28/3529/" title="数据之美之50个数据图形化工具(上) (2010年05月28日)">数据之美之50个数据图形化工具(上)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/20/3244/" title="挑选VPS：Xen与OpenVZ有什么区别？ (2010年05月20日)">挑选VPS：Xen与OpenVZ有什么区别？</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/19/4620/" title="微博通讯和即时通讯的对决 (2010年07月19日)">微博通讯和即时通讯的对决</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/03/30/2617/" title="定制个性化群发邮件的小技巧：Mail Merge (2010年03月30日)">定制个性化群发邮件的小技巧：Mail Merge</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/05/17/3189/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4个人支持整个项目——phpMyAdmin开发人员访谈</title>
		<link>http://www.iwanna.cn/archives/2010/05/15/3160/</link>
		<comments>http://www.iwanna.cn/archives/2010/05/15/3160/#comments</comments>
		<pubDate>Sat, 15 May 2010 14:53:16 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Toole]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3160</guid>
		<description><![CDATA[如果说哪个开源程序不需要介绍大家就认识，那一定是phpMyAdmin，一款流行的MySQL数据库的Web管理界面。而出乎人意料的是，他们的团队只有仅仅4个人来支持整个phpMyAdmin。MySQL是全球最流行的Web程序数据库，而phpMyAdmin让MySQL更易于管理。phpMyAdmin允许数据库设计师连接MySQL，查看他们具有权限的所有数据库和数据表，并在 上面执行操作，如创建和调整表结构、插入和更新数据、导入和导出，以及在多个服务器上同步数据。
phpMyAdmin是SourceForge.net上“最活跃” 和“下载量最多”的程序。phpMyAdmin项目主导人之一的Marc  Delisle说，像phpMyAdmin这样流行的程序，难题之一是如何支持如此之多的用户。“我们的用户范围非常宽，一些人精通数据库原理，而另一些 则几乎是门外汉。我们努力为不同用户提供支持，这非常不容易。另一个难题是是处理web环境自身的问题，如应对不同的操作系统，web服务器问题，以及浏 览器兼容性问题”。
你也许认为如此流行的项目需要很多开发者来维护，而据Delisle透露，“不算翻译人员，当前我们实际上只有4名开发者，因此在沟通协作上完全没 有问题。其他人员虽然没有参与代码编写，但他们也在负责着项目的重要组成部分，如维护项目wiki、在IRC上提供帮助、帮我安排好phpMyAdmin 的各类会议等等。”
phpMyAdmin项目同时欢迎来自用户的贡献。“这是一个社区项目，”Delisle说到，“是的，人们可以建议新的功能，但我们更希望用户给 项目贡献真正的代码，或参与到我们超过60种语言的翻译工作中来。”
“近几年，通过加入Google  Summer of Code，我们实现了一些重大的新功能。参与GSoC的一个巨大好处就是为我们带来了很多活跃的开发者。”
phpMyAdmin于2001年进驻SourceForge.net。“SourceForge很好的满足了我们的需求，我们找不到换到其他平台 的理由。”Delisle说。“但是同时，我们在我们的SourceForge主页上发现很多用户在抱怨下载出错，希望SourceForge在这方面能 做得更好。”

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：MySQL, Mysql, Tool, Toole

	您可能会感兴趣的其他文章
	
	提高MySQL 查询效率的三个技巧 
	如何释放已删除的InnoDB磁盘空间 
	使用参数化查询防止SQL注入漏洞 
	你可能不知道的MySQL 
	Web应用中的轻量级消息队列-MySQL 
	Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) 
	MySQL语句优化的原则 
	MySql索引优化注意 
	MySQL最好的优化技巧 
	mysql日期和时间格式转换 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>如果说哪个开源程序不需要介绍大家就认识，那一定是<a href="http://www.phpmyadmin.net/" target="_blank">phpMyAdmin</a>，一款流行的MySQL数据库的Web管理界面。而出乎人意料的是，他们的团队只有仅仅<strong><a href="http://www.iwanna.cn/archives/2010/05/15/3160/" title="4个人支持整个项目——phpMyAdmin开发人员访谈">4个人来支持整个phpMyAdmin</a></strong>。MySQL是全球最流行的Web程序数据库，而phpMyAdmin让MySQL更易于管理。phpMyAdmin允许数据库设计师连接MySQL，查看他们具有权限的所有数据库和数据表，并在 上面执行操作，如创建和调整表结构、插入和更新数据、导入和导出，以及在多个服务器上同步数据。</p>
<p>phpMyAdmin是<a href="http://sourceforge.net/" target="_blank">SourceForge.net</a>上“最活跃” 和“下载量最多”的程序。phpMyAdmin项目主导人之一的Marc  Delisle说，像phpMyAdmin这样流行的程序，难题之一是如何支持如此之多的用户。“我们的用户范围非常宽，一些人精通数据库原理，而另一些 则几乎是门外汉。我们努力为不同用户提供支持，这非常不容易。另一个难题是是处理web环境自身的问题，如应对不同的操作系统，web服务器问题，以及浏 览器兼容性问题”。</p>
<p>你也许认为如此流行的项目需要很多开发者来维护，而据Delisle透露，“不算翻译人员，当前我们实际上只有4名开发者，因此在沟通协作上完全没 有问题。其他人员虽然没有参与代码编写，但他们也在负责着项目的重要组成部分，如维护项目wiki、在IRC上提供帮助、帮我安排好phpMyAdmin 的各类会议等等。”</p>
<p>phpMyAdmin项目同时欢迎来自用户的贡献。“这是一个社区项目，”Delisle说到，“是的，人们可以建议新的功能，但我们更希望用户给 项目贡献真正的代码，或参与到我们超过60种语言的翻译工作中来。”</p>
<p>“近几年，通过加入<a href="http://code.google.com/soc/" target="_blank">Google  Summer of Code</a>，我们实现了一些重大的新功能。参与GSoC的一个巨大好处就是为我们带来了很多活跃的开发者。”</p>
<p>phpMyAdmin于2001年进驻SourceForge<a href="http://www.iwanna.cn/tags/net/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with .Net">.net</a>。“SourceForge很好的满足了我们的需求，我们找不到换到其他平台 的理由。”Delisle说。“但是同时，我们在我们的SourceForge主页上发现很多用户在抱怨下载出错，希望SourceForge在这方面能 做得更好。”</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/05/15/3160/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/05/15/3160/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/05/15/3160/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/05/15/3160/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/05/15/3160/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a>, <a href="http://www.iwanna.cn/topics/software/tool/" title="Tool" rel="tag nofollow">Tool</a>, <a href="http://www.iwanna.cn/tags/toole/" title="Toole" rel="tag nofollow">Toole</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/05/15/3160/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>19条 WordPress 实用的 SQL 查询语句</title>
		<link>http://www.iwanna.cn/archives/2010/05/12/3089/</link>
		<comments>http://www.iwanna.cn/archives/2010/05/12/3089/#comments</comments>
		<pubDate>Wed, 12 May 2010 03:02:50 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[友情链接]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3089</guid>
		<description><![CDATA[不要轻易就直接执行SQL语句来折腾你的数据库。但有的时候，使用SQL可以大大提高你的办事效率，或者有的时候，你不得不用SQL来改变一些东西；比如，WordPress的默认账户名称“admin”，由于这个账户使用过于广泛，日夜总是让你觉得提心吊胆的，于是就萌生了一定要把“admin”这几个字换成其它的；比如，你想收集所有留言者的邮箱地址来实现你的垃圾营销目的，比如我想把站内所有含链接的留言完全删掉！
本文为大家介绍19条 WordPress 实用的 SQL 查询语句，某天你可能就会用到。
使用方法：
进入你主机的phpmyadmin，选择你的WordPress数据，点击SQL选项卡，在文本框中输入SQL查询语句，执行！
高度注意：

在每次执行SQL语句前，请勿必备份你的WordPress数据库。
1. 删除所有未使用的标签
DELETE a,b,c
FROM wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE c.taxonomy = 'post_tag' AND c.count = 0
2. 删除所有文章修订版本(Revisions)以及它们的Meta数据
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'
3. 更改WordPress地址和首页地址
UPDATE [...]]]></description>
			<content:encoded><![CDATA[<p>不要轻易就直接执行<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句来折腾你的数据库。但有的时候，使用<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>可以大大提高你的办事效率，或者有的时候，你不得不用<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>来改变一些东西；比如，WordPress的默认账户名称“admin”，由于这个账户使用过于广泛，日夜总是让你觉得提心吊胆的，于是就萌生了一定要把“admin”这几个字换成其它的；比如，你想收集所有留言者的邮箱地址来实现你的垃圾营销目的，比如我想把站内所有含链接的留言完全删掉！</p>
<p>本文为大家介绍<strong><a href="http://www.iwanna.cn/archives/2010/05/12/3089/">19条 WordPress 实用的 SQL 查询语句</a></strong>，某天你可能就会用到。</p>
<p><strong>使用方法：</strong></p>
<p>进入你主机的phpmyadmin，选择你的WordPress数据，点击<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>选项卡，在文本框中输入<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>查询语句，执行！</p>
<p><strong>高度注意：</strong><br />
<span id="more-3089"></span><br />
在每次执行<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句前，请<strong>勿必备份你的WordPress数据库</strong>。</p>
<h3>1. 删除所有未使用的标签</h3>
<pre><code>DELETE a,b,c
FROM wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE c.taxonomy = 'post_tag' AND c.count = 0</code></pre>
<h3>2. 删除所有文章修订版本(Revisions)以及它们的Meta数据</h3>
<pre><code>DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'</code></pre>
<h3>3. 更改WordPress地址和首页地址</h3>
<pre><code>UPDATE wp_options
SET option_value = replace(option_value, 'http://www.旧网址.com', 'http://www.新网址.com')
WHERE option_name = 'home' OR option_name = 'siteurl'</code></pre>
<h3>4. 更改文章的GUID</h3>
<pre><code>UPDATE wp_posts
SET guid = REPLACE (guid, 'http://www.旧网址.com', 'http://www.新网址.com')</code></pre>
<h3>5. 更改正文中的链接地址</h3>
<pre><code>UPDATE wp_posts
SET post_content = REPLACE (post_content, 'http://www.旧网址.com', 'http://www.新网址.com')</code></pre>
<h3>6. 更新文章的Meta值</h3>
<pre><code>UPDATE wp_postmeta
SET meta_value = REPLACE (meta_value, 'http://www.旧网址.com', 'http://www.新网址.com'</code></pre>
<h3>7. 重设Admin密码</h3>
<pre><code>UPDATE wp_users
SET user_pass = MD5( 'new_password' )
WHERE user_login = 'admin'</code></pre>
<h3>8. 重设admin的用户名</h3>
<pre><code>UPDATE wp_users
SET user_login = 'newname'
WHERE user_login = 'admin'</code></pre>
<h3>9. 将作者a的文章全部转移到作者b</h3>
<pre><code>UPDATE wp_posts
SET post_author = 'b'
WHERE post_author = 'a'</code></pre>
<h3>10. 删除文章的meta标签</h3>
<pre><code>DELETE FROM wp_postmeta
WHERE meta_key = 'your-meta-key'
</code>
</pre>
<h3>11. 导出所有评论中的邮件地址</h3>
<pre><code>SELECT DISTINCT comment_author_email
FROM wp_comments</code></pre>
<h3>12. 删除所有的Pingback</h3>
<pre><code>DELETE FROM wp_comments
WHERE comment_type = 'pingback'</code></pre>
<h3>13. 删除所有的垃圾评论</h3>
<pre><code>DELETE FROM wp_comments
WHERE comment_approved = 'spam'</code></pre>
<h3>14. 禁用所有激活的插件</h3>
<pre><code>UPDATE wp_options
SET option_value = ''
WHERE option_name = 'active_plugins'</code></pre>
<h3>15. 罗列所有未使用的Meta标签</h3>
<pre><code>SELECT *
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE  wp.ID IS NULL</code></pre>
<h3>16. 关闭旧文章的留言</h3>
<pre><code>UPDATE wp_posts
SET comment_status = 'closed'
WHERE post_date &lt; '2009-01-01' AND post_status = 'publish'</code></pre>
<h3>17. 更新留言者的网址</h3>
<pre><code>UPDATE wp_comments
SET comment_author_url = REPLACE( comment_author_url, 'http://旧网址.com', 'http://新网址.com' )</code></pre>
<h3>18. 更新正文内所有的’target=”_blank”‘为’rel=”nofollow”‘</h3>
<pre><code>UPDATE wp_posts
SET post_content = REPLACE (post_content, 'target="_blank',  'rel="nofollow')</code></pre>
<h3>19. 删除所有含链接的留言</h3>
<pre><code>DELETE FROM wp_comments
WHERE comment_content LIKE "%&lt;a href=%" AND comment_type = ''</code></pre>
<h4>参考文章:</h4>
<ul>
<li><a href="http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql-queries-you-wish-you-knew-earlier/" target="_blank">13  Useful WordPress SQL Queries You Wish You Knew  Earlier</a></li>
<li><a href="http://www.catswhocode.com/blog/wordpress-10-life-saving-sql-queries" target="_blank">WordPress : 10+ life saving SQL queries</a></li>
</ul>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/05/12/3089/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/05/12/3089/#comments">1条评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/05/12/3089/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/05/12/3089/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/05/12/3089/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a>, <a href="http://www.iwanna.cn/topics/develope/sql/" title="Sql" rel="tag nofollow">Sql</a>, <a href="http://www.iwanna.cn/tags/sql/" title="Sql" rel="tag nofollow">Sql</a>, <a href="http://www.iwanna.cn/topics/develope/php/wordpress-php-develope/" title="Wordpress" rel="tag nofollow">Wordpress</a>, <a href="http://www.iwanna.cn/tags/links/" title="友情链接" rel="tag nofollow">友情链接</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/30/11/" title="MySQL 搜索中的大小写敏感性 (2009年03月30日)">MySQL 搜索中的大小写敏感性</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/30/1894/" title="40+ Web前端开发必备的备忘单[上] (2009年06月30日)">40+ Web前端开发必备的备忘单[上]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/03/171/" title="简易Wordpress模板代码帮助手册中文版 (2009年04月3日)">简易Wordpress模板代码帮助手册中文版</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/21/733/" title="最受欢迎的50个免费wordpress模板 (2009年04月21日)">最受欢迎的50个免费wordpress模板</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/13/3113/" title="排名前7位的 Wordpress 404 插件 (2010年05月13日)">排名前7位的 Wordpress 404 插件</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/29/1215/" title="掌握强大的WordPress的子主题 (2009年05月29日)">掌握强大的WordPress的子主题</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/08/240/" title="常用的数据库统计SQL语句(2) (2009年04月8日)">常用的数据库统计SQL语句(2)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/08/236/" title="常用的一些数据统计SQL语句 (2009年04月8日)">常用的一些数据统计SQL语句</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/05/12/3089/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>你可能不知道的MySQL</title>
		<link>http://www.iwanna.cn/archives/2010/02/08/2497/</link>
		<comments>http://www.iwanna.cn/archives/2010/02/08/2497/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 05:37:07 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2497</guid>
		<description><![CDATA[前言：
实验的数据表如下定义：

mysql&#62; desc tbl_name;
+-------+--------------+------+-----+---------+-------+
&#124; Field &#124; Type         &#124; Null &#124; Key &#124; Default &#124; Extra &#124;
+-------+--------------+------+-----+---------+-------+
&#124; uid   &#124; int(11)      &#124; NO   &#124;     &#124; NULL    &#124;       &#124;
&#124; sid   &#124; mediumint(9) &#124; NO   &#124;     &#124; NULL    &#124;       &#124;
&#124; times &#124; mediumint(9) &#124; NO   &#124;     &#124; NULL    &#124;       &#124;
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

存储引擎是MyISAM，里面有10,000条数据。

一、&#8221;\G&#8221;的作用

mysql&#62; select * from tbl_name limit [...]]]></description>
			<content:encoded><![CDATA[<p><strong>前言：</strong></p>
<p>实验的数据表如下定义：</p>
<blockquote>
<pre>mysql&gt; desc tbl_name;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| uid   | int(11)      | NO   |     | NULL    |       |
| sid   | mediumint(9) | NO   |     | NULL    |       |
| times | mediumint(9) | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)</pre>
</blockquote>
<p>存储引擎是MyISAM，里面有10,000条数据。<br />
<span id="more-2497"></span><br />
<strong>一、&#8221;\G&#8221;的作用</strong></p>
<blockquote>
<pre>mysql&gt; select * from tbl_name limit 1;
+--------+--------+-------+
| uid    | sid    | times |
+--------+--------+-------+
| 104460 | 291250 |    29 |
+--------+--------+-------+
1 row in set (0.00 sec)

mysql&gt; select * from tbl_name limit 1\G;
*************************** 1. row ***************************
  uid: 104460
  sid: 291250
times: 29
1 row in set (0.00 sec)</pre>
</blockquote>
<p>有时候，操作返回的列数非常多，屏幕不能一行显示完，显示折行，试试”\G”，把列数据逐行显示（”\G”挽救了我，以前看explain语句横向 显示不全折行看起来巨费劲，还要把数据和列对应起来）。</p>
<p><strong>二、&#8221;Group by&#8221;的“隐形杀手”</strong></p>
<blockquote>
<pre>mysql&gt; explain select uid,sum(times) from tbl_name group by uid\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tbl_name
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10000
        Extra: Using temporary; Using filesort
1 row in set (0.00 sec)

mysql&gt; explain select uid,sum(times) from tbl_name group by uid order by null\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tbl_name
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10000
        Extra: Using temporary
1 row in set (0.00 sec)</pre>
</blockquote>
<p>默认情况下，Group by col会对col字段进行排序，这就是为什么第一语句里面有Using  filesort的原因，如果你不需要对col字段进行排序，加上order by null吧，要快很多，因为filesort很慢的。</p>
<p><strong>三、大批量数据插入</strong></p>
<p>最高效的大批量插入数据的方法：</p>
<blockquote><p>load data infile ‘/path/to/file’ into table tbl_name;</p></blockquote>
<p>如果没有办法先生成文本文件或者不想生成文本文件，可以一次插入多行：</p>
<blockquote><p>insert into tbl_name values (1,2,3),(4,5,6),(7,8,9)…</p></blockquote>
<p>注意一条<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句的最大长度是有限制的。如果还不想这样，可以试试MySQL的<a href="http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html" target="_blank">prepare</a>，应该都会比硬生生的逐条插入要快许多。</p>
<p>如果数据表有索引，建议先暂时禁用索引：</p>
<blockquote><p>alter table tbl_name disable keys;</p></blockquote>
<p>插入完毕之后再激活索引：</p>
<blockquote><p>alter table tbl_name enable keys;</p></blockquote>
<p>对MyISAM表尤其有用。避免每插入一条记录系统更新一下索引。</p>
<p><strong>四、最快复制表结构方法</strong></p>
<blockquote><p>mysql&gt; create table clone_tbl select * from tbl_name limit 0;<br />
Query  OK, 0 rows affected (0.08 sec)</p></blockquote>
<p>只会复制表结构，索引不会复制，如果还要复制数据，把limit 0去掉即可。</p>
<p><strong>五、加引号和不加引号区别</strong></p>
<p>给数据表tbl_name添加索引：</p>
<blockquote><p>mysql&gt; create index uid on tbl_name(uid);</p></blockquote>
<p>测试如下查询：</p>
<blockquote>
<pre>mysql&gt; explain select * from tbl_name where uid = '1081283900'\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tbl_name
         type: ref
possible_keys: uid
          key: uid
      key_len: 4
          ref: const
         rows: 143
        Extra:
1 row in set (0.00 sec)</pre>
</blockquote>
<p>我们在整型字段的值上加索引，是可以用到索引的，网上不少人误传在整型字段上加引号无法使用索引。修改uid字段类型为varchar(12):</p>
<blockquote><p>mysql&gt; alter table tbl_name change uid uid varchar(12) not null;</p></blockquote>
<p>测试如下查询：</p>
<blockquote>
<pre>mysql&gt; explain select * from tbl_name where uid = 1081283900\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tbl_name
         type: ALL
possible_keys: uid
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10000
        Extra: Using where
1 row in set (0.00 sec)</pre>
</blockquote>
<p>我们在查询值上不加索引，结果索引无法使用，注意安全。</p>
<p><strong>六、前缀索引</strong></p>
<p>有时候我们的表中有varchar(255)这样的字段，而且我们还要对该字段建索引，一般没有必要对整个字段建索引，建立前8~12个字符的索引 应该就够了，很少有连续8~12个字符都相等的字段。</p>
<p>为什么？更短的索引意味索引更小、占用CPU时间更少、占用内存更少、占用IO更少和很更好的性能。</p>
<p><strong>七、MySQL索引使用方式</strong></p>
<p>MySQL在一个查询中<strong>只能用到一个索引</strong>，所以要根据查询条件建立联合索引，联合索引只有第一位的字段在查询条 件中能才能使用到。</p>
<p>如果MySQL认为不用索引比用索引更快的话，那么就不会用索引。</p>
<blockquote>
<pre>mysql&gt; create index times on tbl_name(times);
Query OK, 10000 rows affected (0.10 sec)
Records: 10000  Duplicates: 0  Warnings: 0

mysql&gt; explain select * from tbl_name where times &gt; 20\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tbl_name
         type: ALL
possible_keys: times
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10000
        Extra: Using where
1 row in set (0.00 sec)

mysql&gt; explain select * from tbl_name where times &gt; 200\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tbl_name
         type: range
possible_keys: times
          key: times
      key_len: 3
          ref: NULL
         rows: 1599
        Extra: Using where
1 row in set (0.00 sec)</pre>
</blockquote>
<p>数据表中times字段绝大多数都比20大，所以第一个查询没有用索引，第二个才用到索引。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/02/08/2497/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/02/08/2497/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/02/08/2497/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/02/08/2497/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/02/08/2497/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/db/" title="Database" rel="tag nofollow">Database</a>, <a href="http://www.iwanna.cn/tags/db/" title="Database" rel="tag nofollow">Database</a>, <a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/21/4123/" title="盘点2010年十大数据库漏洞 (2010年06月21日)">盘点2010年十大数据库漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/04/18/2765/" title="数据库备份存储过程 [SQL Server 2005] (2010年04月18日)">数据库备份存储过程 [SQL Server 2005]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/18/4071/" title="如何通过 AutoMySQLBackup 备份你的博客数据库 (2010年06月18日)">如何通过 AutoMySQLBackup 备份你的博客数据库</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/21/4658/" title="因为垄断形成，数据库市场将出现更多开源数据库 (2010年07月21日)">因为垄断形成，数据库市场将出现更多开源数据库</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/01/11/2460/" title="使用数据库服务或者使用文件的优缺点 (2010年01月11日)">使用数据库服务或者使用文件的优缺点</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/18/4073/" title="三种直接备份 WordPress 博客数据库的方法 (2010年06月18日)">三种直接备份 WordPress 博客数据库的方法</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/02/08/2497/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web应用中的轻量级消息队列-MySQL</title>
		<link>http://www.iwanna.cn/archives/2009/11/10/2371/</link>
		<comments>http://www.iwanna.cn/archives/2009/11/10/2371/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 05:13:28 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2371</guid>
		<description><![CDATA[Web应用中为什么会需要消息队列？主要原因是由于在高并发环境下，由于来不及同步处理，请求往往会发生堵塞，比如说，大量的insert，update之类的请求同时到达 mysql，直接导致无数的行锁表锁，甚至最后请求会堆积过多，从而触发too many connections错误。通过使用消息队列，我们可以异步处理请求，从而缓解系统的压力。在Web2.0的时代，高并发的情况越来越常见，从而使消息队列有成为居家必备的趋势，相应的也涌现出了很多实现方案，像Twitter以前就使用RabbitMQ实现消息队列服务，现在又转而使用Kestrel来实现消息队列服务，此外还有很多其他的选择，比如说：ActiveMQ，ZeroMQ等。

上述消息队列的软件中，大多为了实现AMQP，STOMP，XMPP之类的协议，变得极其重量级，但在很多Web应用中的实际情况是：我们只是想找到一个缓解高并发请求的解决方案，不需要杂七杂八的功能，一个轻量级的消息队列实现方式才是我们真正需要的。
第一感觉是能不能使用memcached来 实现消息队列？稍加考虑后就会发现它不合适，因为memcached仅仅支持键值方式的操作，没有排序之类的功能，所以如果要用它来实现消息队列，则必须 自己通过某个键来保存数组形式的队列，不过这样的话，在操作队列的时候很容易丢失数据，比如说我们要添加一个消息，则需先取出现有队列，然后把消息保存到 队列尾部，最后保存队列，单纯使用memcached的话，由于我们无法保证整个过程的原子性，所以当处理若干个并发请求时，各个请求间可能会互相覆盖， 丢失数据就在所难免。另外，memcached只是内存键值缓存而已，一旦宕机，数据就消失了。
memcacheq的出现解决了上面的问题，它在memcached的基础上实现了消息队列，以php客户端为例：
消息从尾部入栈：memcache_set
消息从头部出栈：memcache_get
memcacheq依附于memcached之上，所以你可以通过现有的memcached工具来操作它，这无疑是它的一大优势，但它也有一个很大的缺点，那就是memcacheq本身的开发维护似乎并不活跃，如果遇到问题的话，你很可能需要自己动手解决。
目前看来，我更推荐下面这种解决方案，那就是redis，如果不了解，可以参考我以前的文章，表面上看，redis和memcached差不多，也是键值操作，但是redis本身实现了list，相关操作也可以保证是原子的，所以可以很自然的通过list来实现消息队列：
消息从尾部入栈：RPUSH
消息从头部出栈：LPOP
redis本身虽然是一个新项目，但很有朝气，开发维护也很活跃，如果你的下一个Web应用里需要使用轻量级的消息队列，不妨使用它。
此外，还有不少其他的选择可供尝试，比如说MySQL第三方的Q4M引擎，通过扩展SQL语法来操作消息队列，也是一个不错的选择。
套用网络流行语：那些重量级软件实现的不是你要的功能，而只是独在高处不胜寒的寂寞，所以不必迷恋其中，它们只是传说而已。

© 我想网 Akon 所有 , 2009. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：MySQL, Mysql

	您可能会感兴趣的其他文章
	
	提高MySQL 查询效率的三个技巧 
	如何释放已删除的InnoDB磁盘空间 
	使用参数化查询防止SQL注入漏洞 
	你可能不知道的MySQL 
	Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) 
	MySQL语句优化的原则 
	MySql索引优化注意 
	MySQL最好的优化技巧 
	mysql日期和时间格式转换 
	MySQL-Front v5 注册码,注册机。 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>Web应用中为什么会需要消息队列？主要原因是由于在高并发环境下，由于来不及同步处理，请求往往会发生堵塞，比如说，大量的insert，update之类的请求同时到达 mysql，直接导致无数的行锁表锁，甚至最后请求会堆积过多，从而触发too many connections错误。通过使用消息队列，我们可以异步处理请求，从而缓解系统的压力。在Web2.0的时代，高并发的情况越来越常见，从而使消息队列有成为居家必备的趋势，相应的也涌现出了很多实现方案，像Twitter以前就使用<a href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a>实现消息队列服务，现在又转而使用<a href="http://github.com/robey/kestrel" target="_blank">Kestrel</a>来实现消息队列服务，此外还有很多其他的选择，比如说：<a href="http://activemq.apache.org/" target="_blank">ActiveMQ</a>，<a href="http://www.zeromq.org/" target="_blank">ZeroMQ</a>等。<br />
<span id="more-2371"></span><br />
上述消息队列的软件中，大多为了实现AMQP，STOMP，XMPP之类的协议，变得极其重量级，但在很多Web应用中的实际情况是：我们只是想找到一个缓解高并发请求的解决方案，不需要杂七杂八的功能，一个轻量级的消息队列实现方式才是我们真正需要的。</p>
<p>第一感觉是能不能使用<a href="http://www.danga.com/memcached/" target="_blank">memcached</a>来 实现消息队列？稍加考虑后就会发现它不合适，因为memcached仅仅支持键值方式的操作，没有排序之类的功能，所以如果要用它来实现消息队列，则必须 自己通过某个键来保存数组形式的队列，不过这样的话，在操作队列的时候很容易丢失数据，比如说我们要添加一个消息，则需先取出现有队列，然后把消息保存到 队列尾部，最后保存队列，单纯使用memcached的话，由于我们无法保证整个过程的原子性，所以当处理若干个并发请求时，各个请求间可能会互相覆盖， 丢失数据就在所难免。另外，memcached只是内存键值缓存而已，一旦宕机，数据就消失了。</p>
<p><a href="http://memcachedb.org/memcacheq/" target="_blank">memcacheq</a>的出现解决了上面的问题，它在memcached的基础上实现了消息队列，以php客户端为例：</p>
<p>消息从尾部入栈：memcache_set<br />
消息从头部出栈：memcache_get</p>
<p>memcacheq依附于memcached之上，所以你可以通过现有的memcached工具来操作它，这无疑是它的一大优势，但它也有一个很大的缺点，那就是memcacheq本身的开发维护似乎并不活跃，如果遇到问题的话，你很可能需要自己动手解决。</p>
<p>目前看来，我更推荐下面这种解决方案，那就是<a href="http://code.google.com/p/redis/" target="_blank">redis</a>，如果不了解，可以参考我以前的<a href="http://hi.baidu.com/thinkinginlamp/blog/item/3358c93d174e35ce9f3d62bf.html" target="_blank">文章</a>，表面上看，redis和memcached差不多，也是键值操作，但是redis本身实现了<a href="http://code.google.com/p/redis/wiki/CommandReference" target="_blank">list</a>，相关操作也可以保证是原子的，所以可以很自然的通过list来实现消息队列：</p>
<p>消息从尾部入栈：RPUSH<br />
消息从头部出栈：LPOP</p>
<p>redis本身虽然是一个新项目，但很有朝气，开发维护也很活跃，如果你的下一个Web应用里需要使用轻量级的消息队列，不妨使用它。</p>
<p>此外，还有不少其他的选择可供尝试，比如说MySQL第三方的<a href="http://q4m.31tools.com/" target="_blank">Q4M引擎</a>，通过扩展<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语法来操作消息队列，也是一个不错的选择。</p>
<p>套用网络流行语：那些重量级软件实现的不是你要的功能，而只是独在高处不胜寒的寂寞，所以不必迷恋其中，它们只是传说而已。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/11/10/2371/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/11/10/2371/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/11/10/2371/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/11/10/2371/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/11/10/2371/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/14/3981/" title="MySQL-Front v5 注册码,注册机。 (2010年06月14日)">MySQL-Front v5 注册码,注册机。</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/11/10/2371/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL最好的优化技巧</title>
		<link>http://www.iwanna.cn/archives/2009/10/22/2335/</link>
		<comments>http://www.iwanna.cn/archives/2009/10/22/2335/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 06:09:19 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2335</guid>
		<description><![CDATA[1、选取最适用的字段属性
MySQL 可以很好的支持大数据量的存取，但是一般说来，数据库中的表越小，在它上面执行的查询也就会越快。因此，在创建表的时候，为了获得更好的性能，我们可以将 表中字段的宽度设得尽可能小。例如，在定义邮政编码这个字段时，如果将其设置为CHAR(255),显然给数据库增加了不必要的空间，甚至使用 VARCHAR这种类型也是多余的，因为CHAR(6)就可以很好的完成任务了。同样的，如果可以的话，我们应该使用MEDIUMINT而不是BIGIN 来定义整型字段。
另外一个提高效率的方法是在可能的情况下，应该尽量把字段设置为NOT NULL，这样在将来执行查询的时候，数据库不用去比较NULL值。

对于某些文本字段，例如“省份”或者“性别”，我们可以将它们定义为ENUM类型。因为在MySQL中，ENUM类型被当作数值型数据来处理，而数值型数据被处理起来的速度要比文本类型快得多。这样，我们又可以提高数据库的性能。
2、使用连接（JOIN）来代替子查询(Sub-Queries)
MySQL 从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果，然后把这个结果作为过滤条件用在另一个查询中。例如，我们 要将客户基本信息表中没有任何订单的客户删除掉，就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来，然后将结果传递给主查询，如下所示：
DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
使 用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作，同时也可以避免事务或者表锁死，并且写起来也很容易。但是，有些情况下，子查询可 以被更有效率的连接（JOIN）.. 替代。例如，假设我们要将所有没有订单记录的用户取出来，可以用下面这个查询完成：
SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
如果使用连接（JOIN）.. 来完成这个查询工作，速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话，性能将会更好，查询如下：
SELECT * FROM customerinfo
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL
连接（JOIN）.. 之所以更有效率一些，是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
3、使用联合(UNION)来代替手动创建的临时表
MySQL 从 4.0 的版本开始支持 UNION 查询，它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户端的查询会话结束的时候，临时表会被自动删除，从而保证数据库整齐、高效。使用 UNION 来创建查询的时候，我们只需要用 UNION作为关键字把多个 SELECT [...]]]></description>
			<content:encoded><![CDATA[<p>1、选取最适用的字段属性</p>
<p>MySQL 可以很好的支持大数据量的存取，但是一般说来，数据库中的表越小，在它上面执行的查询也就会越快。因此，在创建表的时候，为了获得更好的性能，我们可以将 表中字段的宽度设得尽可能小。例如，在定义邮政编码这个字段时，如果将其设置为CHAR(255),显然给数据库增加了不必要的空间，甚至使用 VARCHAR这种类型也是多余的，因为CHAR(6)就可以很好的完成任务了。同样的，如果可以的话，我们应该使用MEDIUMINT而不是BIGIN 来定义整型字段。</p>
<p>另外一个提高效率的方法是在可能的情况下，应该尽量把字段设置为NOT NULL，这样在将来执行查询的时候，数据库不用去比较NULL值。<br />
<span id="more-2335"></span><br />
对于某些文本字段，例如“省份”或者“性别”，我们可以将它们定义为ENUM类型。因为在MySQL中，ENUM类型被当作数值型数据来处理，而数值型数据被处理起来的速度要比文本类型快得多。这样，我们又可以提高数据库的性能。<br />
2、使用连接（JOIN）来代替子查询(Sub-Queries)</p>
<p>MySQL 从4.1开始支持<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果，然后把这个结果作为过滤条件用在另一个查询中。例如，我们 要将客户基本信息表中没有任何订单的客户删除掉，就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来，然后将结果传递给主查询，如下所示：</p>
<p>DELETE FROM customerinfo<br />
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )</p>
<p>使 用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>操作，同时也可以避免事务或者表锁死，并且写起来也很容易。但是，有些情况下，子查询可 以被更有效率的连接（JOIN）.. 替代。例如，假设我们要将所有没有订单记录的用户取出来，可以用下面这个查询完成：</p>
<p>SELECT * FROM customerinfo<br />
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )</p>
<p>如果使用连接（JOIN）.. 来完成这个查询工作，速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话，性能将会更好，查询如下：</p>
<p>SELECT * FROM customerinfo<br />
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.<br />
CustomerID<br />
WHERE salesinfo.CustomerID IS NULL</p>
<p>连接（JOIN）.. 之所以更有效率一些，是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。<br />
3、使用联合(UNION)来代替手动创建的临时表</p>
<p>MySQL 从 4.0 的版本开始支持 UNION 查询，它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户端的查询会话结束的时候，临时表会被自动删除，从而保证数据库整齐、高效。使用 UNION 来创建查询的时候，我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了，要注意的是所有 SELECT 语句中的字段数目要想同。下面的例子就演示了一个使用 UNION的查询。</p>
<p>SELECT Name, Phone FROM client<br />
UNION<br />
SELECT Name, BirthDate FROM author<br />
UNION<br />
SELECT Name, Supplier FROM product<br />
4、事务</p>
<p>尽管我们可以使用子查询（Sub-Queries）、连接（JOIN）和联合（UNION）来创建各种各样的查 询，但不是所有的数据库操作都可以只用一条或少数几条<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下，当这 个语句块中的某一条语句运行出错的时候，整个语句块的操作就会变得不确定起来。设想一下，要把某个数据同时插入两个相关联的表中，可能会出现这样的情况： 第一个表中成功更新后，数据库突然出现意外状况，造成第二个表中的操作没有完成，这样，就会造成数据的不完整，甚至会破坏数据库中的数据。要避免这种情 况，就应该使用事务，它的作用是：要么语句块中每条语句都操作成功，要么都失败。换句话说，就是可以保持数据库中数据的一致性和完整性。事物以BEGIN 关键字开始，COMMIT关键字结束。在这之间的一条<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>操作失败，那么，ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。</p>
<p>BEGIN;<br />
INSERT INTO salesinfo SET CustomerID=14;<br />
UPDATE inventory SET Quantity=11<br />
WHERE item=&#8217;book&#8217;;<br />
COMMIT;</p>
<p>事务的另一个重要作用是当多个用户同时使用相同的数据源时，它可以利用锁定数据库的方法来为用户提供一种安全的访问方式，这样可以保证用户的操作不被其它的用户所干扰。<br />
5、锁定表</p>
<p>尽管事务是维护数据库完整性的一个非常好的方法，但却因为它的独占性，有时会影响数据库的性能，尤其是在很大的应用系统中。由于在事务执行的过程中，数据库将会被锁定，因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户</p>
<p>来使用，事务造成的影响不会成为一个太大的问题；但假设有成千上万的用户同时访问一个数据库系统，例如访问一个电子商务网站，就会产生比较严重的响应延迟。</p>
<p>其实，有些情况下我们可以通过锁定表的方法来获得更好的性能。下面的例子就用锁定表的方法来完成前面一个例子中事务的功能。</p>
<p>LOCK TABLE inventory WRITE<br />
SELECT Quantity FROM inventory<br />
WHEREItem=&#8217;book&#8217;;<br />
&#8230;<br />
UPDATE inventory SET Quantity=11<br />
WHEREItem=&#8217;book&#8217;;<br />
UNLOCK TABLES</p>
<p>这 里，我们用一个 SELECT 语句取出初始数据，通过一些计算，用 UPDATE 语句将新值更新到表中。包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前，不会有其它的访问来对 inventory 进行插入、更新或者删除的操作。<br />
6、使用外键</p>
<p>锁定表的方法可以维护数据的完整性，但是它却不能保证数据的关联性。这个时候我们就可以使用外键。例如，外 键可以保证每一条销售记录都指向某一个存在的客户。在这里，外键可以把customerinfo 表中的CustomerID映射到salesinfo表中CustomerID，任何一条没有合法CustomerID的记录都不会被更新或插入到 salesinfo中。</p>
<p>CREATE TABLE customerinfo<br />
(<br />
CustomerID INT NOT NULL ,<br />
PRIMARY KEY ( CustomerID )<br />
) TYPE = INNODB;</p>
<p>CREATE TABLE salesinfo<br />
(<br />
SalesID INT NOT NULL,<br />
CustomerID INT NOT NULL,<br />
PRIMARY KEY(CustomerID, SalesID),<br />
FOREIGN KEY (CustomerID) REFERENCES customerinfo<br />
(CustomerID) ON DELETECASCADE<br />
) TYPE = INNODB;</p>
<p>注 意例子中的参数“ON DELETE CASCADE”。该参数保证当 customerinfo 表中的一条客户记录被删除的时候，salesinfo 表中所有与该客户相关的记录也会被自动删除。如果要在 MySQL 中使用外键，一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型。该类型不是 MySQL 表的默认类型。定义的方法是在 CREATE TABLE 语句中加上 TYPE=INNODB。如例中所示。<br />
7、使用索引</p>
<p>索引是提高数据库性能的常用方法，它可以令数据库服务器以比没有索引快得多的速度检索特定的行，尤其是在查 询语句当中包含有MAX(), MIN()和ORDERBY这些命令的时候，性能提高更为明显。那该对哪些字段建立索引呢？一般说来，索引应建立在那些将用于JOIN, WHERE判断和ORDER BY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说，出现大量重复值是很有可能的情况，例如 customerinfo中的“province”.. 字段，在这样的字段上建立索引将不会有什么帮助；相反，还有可能降低数据库的性能。我们在创建表的时候可以同时创建合适的索引，也可以使用ALTER TABLE或CREATE INDEX在以后创建索引。此外，MySQL</p>
<p>从版本3.23.23开始支持全文索引和搜索。全文索引在 MySQL 中是一个FULLTEXT类型索引，但仅能用于MyISAM 类型的表。对于一个大的数据库，将数据装载到一个没有FULLTEXT索引的表中，然后再使用ALTER TABLE或CREATE INDEX创建索引，将是非常快的。但如果将数据装载到一个已经有FULLTEXT索引的表中，执行过程将会非常慢。<br />
8、优化的查询语句</p>
<p>绝大多数情况下，使用索引可以提高查询的速度，但如果<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>语句使用不恰当的话，索引将无法发挥它应 有的作用。下面是应该注意的几个方面。首先，最好是在相同类型的字段间进行比较的操作。在MySQL 3.23版之前，这甚至是一个必须的条件。例如不能将一个建有索引的INT字段和BIGINT字段进行比较；但是作为特殊的情况，在CHAR类型的字段和 VARCHAR类型字段的字段大小相同的时候，可以将它们进行比较。其次，在建有索引的字段上尽量不要使用函数进行操作。</p>
<p>例如，在一个DATE类型的字段上使用YEAE()函数时，将会使索引不能发挥应有的作用。所以，下面的两个查询虽然返回的结果一样，但后者要比前者快得多。</p>
<p>SELECT * FROM order WHERE YEAR(OrderDate)&lt;2001;</p>
<p>SELECT * FROM order WHERE OrderDate&lt;&#8221;2001-01-01&#8243;;</p>
<p>同样的情形也会发生在对数值型字段进行计算的时候：</p>
<p>SELECT * FROM inventory WHERE Amount/7&lt;24;</p>
<p>SELECT * FROM inventory WHERE Amount&lt;24*7;</p>
<p>上面的两个查询也是返回相同的结果，但后面的查询将比前面的一个快很多。第三，在搜索字符型字段时，我们有时会使用 LIKE 关键字和通配符，这种做法虽然简单，但却也是以牺牲系统性能为代价的。例如下面的查询将会比较表中的每一条记录。<br />
SELECT * FROM books<br />
WHERE name like &#8220;MySQL%&#8221;</p>
<p>但是如果换用下面的查询，返回的结果一样，但速度就要快上很多：</p>
<p>SELECT * FROM books<br />
WHERE name&gt;=&#8221;MySQL&#8221;and name&lt;&#8221;MySQM&#8221;</p>
<p>最后，应该注意避免在查询中让MySQL进行自动类型转换，因为转换过程也会使索引变得不起作用。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/10/22/2335/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/10/22/2335/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/10/22/2335/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/10/22/2335/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/10/22/2335/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/14/3981/" title="MySQL-Front v5 注册码,注册机。 (2010年06月14日)">MySQL-Front v5 注册码,注册机。</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/10/22/2335/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL语句优化的原则</title>
		<link>http://www.iwanna.cn/archives/2009/10/22/2333/</link>
		<comments>http://www.iwanna.cn/archives/2009/10/22/2333/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 06:08:06 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2333</guid>
		<description><![CDATA[1、使用索引来更快地遍历表。
缺省情况下建立的索引是非群集索引，但有时它并不是最佳的。在非群集索引下，数据在物理上随机存放在数据页上。
合理的索引设计要建立在对各种查询的分析和预测上。一般来说：
a.有大量重复值、且经常有范围查询（ &#62; ,&#60; ，&#62; =,&#60; =）和order by、group by发生的列，可考虑建立群集索引；
b.经常同时存取多列，且每列都含有重复值可考虑建立组合索引；
c.组合索引要尽量使关键查询形成索引覆盖，其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引
越多越好，恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引，维护索引集合就要做相应的更新工作。

2、在海量查询时尽量少用格式转换。
3、ORDER BY和GROPU BY使用ORDER BY和GROUP BY短语，任何一种索引都有助于SELECT的性能提高。
4、任何对列的操作都将导致表扫描，它包括数据库函数、计算表达式等等，查询时要尽可能将操作移至等号右边。
5、IN、OR子句常会使用工作表，使索引失效。如果不产生大量重复值，可以考虑把子句拆开。拆开的子句中应该包含索引。
6、只要能满足你的需求，应尽可能使用更小的数据类型：例如使用MEDIUMINT代替INT
7、尽量把所有的列设置为NOT NULL，如果你要保存NULL，手动去设置它，而不是把它设为默认值。
8、尽量少用VARCHAR、TEXT、BLOB类型
9、如果你的数据只有你所知的少量的几个。最好使用ENUM类型
10、正如graymice所讲的那样，建立索引。 
以下是我做的一个实验，可以发现索引能极大地提高查询的效率（我有一个会员信息表users，里边有37365条用户记录）

在不加索引的时候进行查询：
sql语句A:
select * from users where username like &#8216;%许%&#8217;;
在Mysql-Front中的8次查询时长为：1.40,0.54,0.54,0.54,0.53,0.55,0.54 共找到960条记录
sql语句B:
select * from users where username like &#8216;许%&#8217;;
在Mysql-Front中的8次查询时长为：0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 共找到836条记录
sql语句C:
select * from users where username like &#8216;%许&#8217;;
在Mysql-Front中的8次查询时长为：0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 共找到7条记录
为username列添加索引:
create index usernameindex on users(username(6));
再次查询：
sql语句A:
select * from users where username like &#8216;%许%&#8217;;
在Mysql-Front中的8次查询时长为：0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 共找到960条记录
sql语句B:
select * from users where username [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1、使用索引来更快地遍历表。</strong></p>
<p>缺省情况下建立的索引是非群集索引，但有时它并不是最佳的。在非群集索引下，数据在物理上随机存放在数据页上。</p>
<p>合理的索引设计要建立在对各种查询的分析和预测上。一般来说：<br />
a.有大量重复值、且经常有范围查询（ &gt; ,&lt; ，&gt; =,&lt; =）和order by、group by发生的列，可考虑建立群集索引；<br />
b.经常同时存取多列，且每列都含有重复值可考虑建立组合索引；<br />
c.组合索引要尽量使关键查询形成索引覆盖，其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引<br />
越多越好，恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引，维护索引集合就要做相应的更新工作。<br />
<span id="more-2333"></span><br />
<strong>2、在海量查询时尽量少用格式转换。</strong></p>
<p><strong>3、ORDER BY和GROPU BY使用ORDER BY和GROUP BY短语，任何一种索引都有助于SELECT的性能提高。</strong></p>
<p><strong>4、任何对列的操作都将导致表扫描，它包括数据库函数、计算表达式等等，查询时要尽可能将操作移至等号右边。</strong></p>
<p><strong>5、IN、OR子句常会使用工作表，使索引失效。如果不产生大量重复值，可以考虑把子句拆开。拆开的子句中应该包含索引。</strong></p>
<p><strong>6、只要能满足你的需求，应尽可能使用更小的数据类型：例如使用MEDIUMINT代替INT</strong></p>
<p><strong>7、尽量把所有的列设置为NOT NULL，如果你要保存NULL，手动去设置它，而不是把它设为默认值。</strong></p>
<p><strong>8、尽量少用VARCHAR、TEXT、BLOB类型</strong></p>
<p><strong>9、如果你的数据只有你所知的少量的几个。最好使用ENUM类型</strong></p>
<p><strong>10、正如graymice所讲的那样，建立索引。 </strong></p>
<p><span style="color: #000000;"><strong>以下是我做的一个实验，可以发现索引能极大地提高查询的效率（<span style="color: #ff0000;">我有一个会员信息表users，里边有37365条用户记录）</span><br />
</strong></span><br />
<strong><span style="color: #ff0000;">在不加索引的时候进行查询：</span></strong><br />
<span style="color: #000000;"><strong><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句A:</strong><br />
select * from users where username like &#8216;%许%&#8217;;<br />
在Mysql-Front中的8次查询时长为：1.40,0.54,0.54,0.54,0.53,0.55,0.54 共找到960条记录</span></p>
<p><strong><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句B:</strong><br />
select * from users where username like &#8216;许%&#8217;;<br />
在Mysql-Front中的8次查询时长为：0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 共找到836条记录</p>
<p><span style="color: #000000;"><strong><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句C:<br />
</strong>select * from users where username like &#8216;%许&#8217;;<br />
在Mysql-Front中的8次查询时长为：0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 共找到7条记录</span></p>
<p><strong><span style="color: #ff0000;">为username列添加索引:</span></strong><br />
<span style="color: #000000;">create index usernameindex on users(username(6));<br />
再次查询：</span></p>
<p><strong><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句A:</strong><br />
select * from users where username like &#8216;%许%&#8217;;<br />
在Mysql-Front中的8次查询时长为：0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 共找到960条记录</p>
<p><strong><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句B:</strong><br />
select * from users where username like &#8216;许%&#8217;;<br />
在Mysql-Front中的8次查询时长为：0.06,0.07,0.07,0.07,0.07,0.07,0.06,0.06 共找到836条记录</p>
<p><span style="color: #000000;"><strong><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句C:<br />
</strong>select * from users where username like &#8216;%许&#8217;;<br />
在Mysql-Front中的8次查询时长为：0.32,0.31,0.31,0.32,0.31,0.32,0.31,0.31 共找到7条记录</span></p>
<p>在实验过程中，我没有另开任何程序，以上的数据说明在单表查询中，建立索引的可以极大地提高查询速度。</p>
<p>另外要说的是如果建立了索引，对于like &#8216;许%&#8217;类型的查询，速度提升是最明显的。因此，我们在写<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>语句的<br />
时候也尽量采用这种方式查询。</p>
<p>对于多表查询我们的优化原则是：<br />
尽量将索引建立在：left join on/right join on &#8230;　＋条件，的条件语句中所涉及的字段上。多表查询比单表查<br />
询更能体现索引的优势。</p>
<p><strong>11、索引的建立原则：<br />
</strong> 如果一列的中数据的前缀重复值很少，我们最好就只索引这个前缀。Mysql支持这种索引。我在上面用到的索<br />
引方法就是对username最左边的6个字符进行索引。索引越短，占用的 磁盘空间越少，在检索过程中花的时<br />
间也越少。这方法可以对最多左255个字符进行索引。<br />
在很多场合，我们可以给建立多列数据建立索引。<br />
索引应该建立在查询条件中进行比较的字段上，而不是建立在我们要找出来并且显示的字段上</p>
<p><strong>12、一往情深问到的问题<br />
</strong>IN、OR子句常会使用工作表，使索引失效。如果不产生大量重复值，可以考虑把子句拆开。拆开的子句中应该包含索引。</p>
<p><strong>这句话怎么理解决，请举个例子</strong><br />
<span style="color: #000000;">如下:<br />
如果在fields1和fields2上同时建立了索引，fields1为主索引</span></p>
<p>以下<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>会用到索引<br />
select * from tablename1 where fields1=&#8217;value1&#8242; and fields2=&#8217;value2&#8242;</p>
<p>以下<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>不会用到索引<br />
select * from tablename1 where fields1=&#8217;value1&#8242; or fields2=&#8217;value2&#8242;</p>
<p><strong>13.索引带来查询上的速度的大大提升,但索引也占用了额外的硬盘空间(当然现在一般硬盘空间不成问题),<br />
而且往表中插入新记录时索引也要随着更新这也需要一定时间.</strong><br />
有些表如果经常insert,而较少select,就不用加索引了.不然每次写入数据都要重新改写索引,花费时间; 这个视<br />
实际情况而定,通常情况下索引是必需的.</p>
<p><strong>14.我在对查询效率有怀疑的时候,一般是直接用Mysql的Explain来跟踪查询情况</strong>.<br />
你用Mysql-Front是通过时长来比较,我觉得如果从查询时扫描字段的次数来比较更精确一些.</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/10/22/2333/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/10/22/2333/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/10/22/2333/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/10/22/2333/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/10/22/2333/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/14/3981/" title="MySQL-Front v5 注册码,注册机。 (2010年06月14日)">MySQL-Front v5 注册码,注册机。</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/10/22/2333/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySql索引优化注意</title>
		<link>http://www.iwanna.cn/archives/2009/10/22/2330/</link>
		<comments>http://www.iwanna.cn/archives/2009/10/22/2330/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 05:32:35 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2330</guid>
		<description><![CDATA[设计好MySql的索引可以让你的数据库飞起来，大大的提高数据库效率。设计MySql索引的时候有一下几点注意：
1，创建索引
对于查询占主要的应用来说，索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的，或者说没有添加更为有效的索引导致。如果不加
索引的话，那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描，如果一张表的数据量很大而符合条件的结果又很少，那么不加索引会引起致命的性能下
降。但是也不是什么情况都非得建索引不可，比如性别可能就只有两个值，建索引不仅没什么优势，还会影响到更新速度，这被称为过度索引。

2，复合索引
比如有一条语句是这样的：select * from users where area=’beijing’ and age=22;
如果我们是在area和age上分别创建单个索引的话，由于mysql查询每次只能使用一个索引，所以虽然这样已经相对不做索引时全表扫描提高了很多效
率，但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age,
salary)的复合索引，那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引，这被称为最佳左前缀
特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边，依次递减。
3，索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中，复合索引中只要有一列含有NULL值，那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
4，使用短索引
对串列进行索引，如果可能应该指定一个前缀长度。例如，如果有一个CHAR(255)的 列，如果在前10 个或20 个字符内，多数值是惟一的，那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
5，排序的索引问题
mysql查询只使用一个索引，因此如果where子句中已经使用了索引的话，那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作；尽量不要包含多个列的排序，如果需要最好给这些列创建复合索引。
6，like语句操作
一般情况下不鼓励使用like操作，如果非使用不可，如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
7，不要在列上进行运算
select * from users where
YEAR(adddate)
8，不使用NOT IN和操作
NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替，id3则可使用id&#62;3 or id

© 我想网 Akon 所有 , 2009. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：MySQL, Mysql

	您可能会感兴趣的其他文章
	
	提高MySQL 查询效率的三个技巧 
	如何释放已删除的InnoDB磁盘空间 
	使用参数化查询防止SQL注入漏洞 
	你可能不知道的MySQL 
	Web应用中的轻量级消息队列-MySQL 
	Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) 
	MySQL语句优化的原则 
	MySQL最好的优化技巧 
	mysql日期和时间格式转换 
	MySQL-Front v5 注册码,注册机。 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>设计好MySql的索引可以让你的数据库飞起来，大大的提高数据库效率。设计MySql索引的时候有一下几点注意：<br />
1，创建索引<br />
对于查询占主要的应用来说，索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的，或者说没有添加更为有效的索引导致。如果不加<br />
索引的话，那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描，如果一张表的数据量很大而符合条件的结果又很少，那么不加索引会引起致命的性能下<br />
降。但是也不是什么情况都非得建索引不可，比如性别可能就只有两个值，建索引不仅没什么优势，还会影响到更新速度，这被称为过度索引。<br />
<span id="more-2330"></span><br />
2，复合索引<br />
比如有一条语句是这样的：select * from users where area=’beijing’ and age=22;<br />
如果我们是在area和age上分别创建单个索引的话，由于mysql查询每次只能使用一个索引，所以虽然这样已经相对不做索引时全表扫描提高了很多效<br />
率，但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age,<br />
salary)的复合索引，那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引，这被称为最佳左前缀<br />
特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边，依次递减。<br />
3，索引不会包含有NULL值的列<br />
只要列中包含有NULL值都将不会被包含在索引中，复合索引中只要有一列含有NULL值，那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。<br />
4，使用短索引<br />
对串列进行索引，如果可能应该指定一个前缀长度。例如，如果有一个CHAR(255)的 列，如果在前10 个或20 个字符内，多数值是惟一的，那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。<br />
5，排序的索引问题<br />
mysql查询只使用一个索引，因此如果where子句中已经使用了索引的话，那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作；尽量不要包含多个列的排序，如果需要最好给这些列创建复合索引。<br />
6，like语句操作<br />
一般情况下不鼓励使用like操作，如果非使用不可，如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。<br />
7，不要在列上进行运算<br />
select * from users where<br />
YEAR(adddate)<br />
8，不使用NOT IN和操作<br />
NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替，id3则可使用id&gt;3 or id</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/10/22/2330/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/10/22/2330/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/10/22/2330/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/10/22/2330/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/10/22/2330/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/27/2058/" title="Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes) (2009年07月27日)">Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/14/3981/" title="MySQL-Front v5 注册码,注册机。 (2010年06月14日)">MySQL-Front v5 注册码,注册机。</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/10/22/2330/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schema的优化和索引-高性能的索引策略-覆盖索引(Covering Indexes)</title>
		<link>http://www.iwanna.cn/archives/2009/07/27/2058/</link>
		<comments>http://www.iwanna.cn/archives/2009/07/27/2058/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 01:21:14 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2058</guid>
		<description><![CDATA[索引是高效找到行的一个方法，但是MySQL也能使用索引找到一个列的数据，因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据；当能通 过读取索引就可以得到想要的数据，那就不需要读取行了。一个索引包含了（或覆盖了）满足查询结果的数据就叫做覆盖索引（covering indexex）

覆盖索引是非常强大的工具并且可以大幅度提升性能。考虑下仅仅读取索引的好处：

索引的实体往往小于整个行的大小。如果MySQL仅仅读取索引，意味着访问的数据就非常少了。这对于缓存的工作非常有用，这样相应的时间基本都是 来自复制数据而已。对于IO限制也非常有用，因为索引要比数据更小并且更容易的写入内存中。（这对于MyISAM尤其有效，它可以对索引进行压缩，这样索 引就变得更小了）。
索引是根据索引值的来排序的，因此IO限制范围的访问相对比从随机硬盘位置所需的IO是较少的。对于一些存储引擎，比如MyISAM，你甚至可以用OPTIMIZE这个表来获取全部的排序索引。这样可使简单的范围查询使用完全连续的索引的访问。
大部分存储引擎缓存索引要好于数据。一些存储引擎，比如MyISAM只缓存索引。因为操作系统缓存了MyISAM的数据，访问数据需要一个系统的调用。这样会导致非常严重的性能问题。尤其对于缓存来说，系统的调用是数据访问消耗最大的一部分。
覆盖索引对与InnoDB表有些特殊的效用。因为InnoDB是聚簇索引。InnoDB的次要索引在它们叶子节点保存了行的主键。因此，次要索引的覆盖可以避免在主键上另一个索引的查找。

在这些场景中，从索引中满足一个查询消耗要比查询行要低很多。
覆盖索引也并不适用于任意的索引类型，索引必须存储列的值。Hash, spatial, 和full-text索引不存储值，因此MySQL只能使用B-TREE。并且不同的存储引擎实现覆盖索引都是不同的。并不是所有的存储引擎都支持它们。
当一个查询被索引所覆盖。（an index-covered query）。你使用EXPLAIN就会发现EXTRA列的值为“Using index”。一个例子，sakila.inventory表由一个多列的索引在store_id, film_id的列上。MySQL能使用索引来访问这两列。如下

mysql&#62; EXPLAIN SELECT store_id, film_id FROM sakila.inventory\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: inventory
type: index
possible_keys: NULL
key: idx_store_id_film_id
key_len: 3
ref: NULL
rows: 4673
Extra: Using index

覆盖索引的语句有些诡异的是会关闭优化。MySQL语句优化器在执行语句之前会决定是否有一个索引覆盖它。假使这个索引覆盖了一个WHERE条件，但是并不是整个查询。如果这个条件评估为false，MySQL51以及以前版本都会取出行。
让我们来看看为什么会这样。以及怎样重写这个查询来解决上面所说的问题。

mysql&#62; EXPLAIN SELECT * FROM products WHERE actor=&#8217;SEAN CARREY&#8217;
-&#62; AND title like &#8216;%APOLLO%&#8217;\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: products
type: ref
possible_keys: ACTOR,IX_PROD_ACTOR
key: ACTOR
key_len: 52


ref: const
rows: 10
Extra: [...]]]></description>
			<content:encoded><![CDATA[<p>索引是高效找到行的一个方法，但是MySQL也能使用索引找到一个列的数据，因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据；当能通 过读取索引就可以得到想要的数据，那就不需要读取行了。一个索引包含了（或覆盖了）满足查询结果的数据就叫做覆盖索引（covering indexex）<br />
<img src="http://www.iwanna.cn/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" mce_src="http://www.iwanna.cn/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" class="mceWPmore mceItemNoResize" title="更多..."><br />
覆盖索引是非常强大的工具并且可以大幅度提升性能。考虑下仅仅读取索引的好处：</p>
<ul>
<li>索引的实体往往小于整个行的大小。如果MySQL仅仅读取索引，意味着访问的数据就非常少了。这对于缓存的工作非常有用，这样相应的时间基本都是 来自复制数据而已。对于IO限制也非常有用，因为索引要比数据更小并且更容易的写入内存中。（这对于MyISAM尤其有效，它可以对索引进行压缩，这样索 引就变得更小了）。</li>
<li>索引是根据索引值的来排序的，因此IO限制范围的访问相对比从随机硬盘位置所需的IO是较少的。对于一些存储引擎，比如MyISAM，你甚至可以用OPTIMIZE这个表来获取全部的排序索引。这样可使简单的范围查询使用完全连续的索引的访问。</li>
<li>大部分存储引擎缓存索引要好于数据。一些存储引擎，比如MyISAM只缓存索引。因为操作系统缓存了MyISAM的数据，访问数据需要一个系统的调用。这样会导致非常严重的性能问题。尤其对于缓存来说，系统的调用是数据访问消耗最大的一部分。</li>
<li>覆盖索引对与InnoDB表有些特殊的效用。因为InnoDB是聚簇索引。InnoDB的次要索引在它们叶子节点保存了行的主键。因此，次要索引的覆盖可以避免在主键上另一个索引的查找。</li>
</ul>
<div>在这些场景中，从索引中满足一个查询消耗要比查询行要低很多。</div>
<div>覆盖索引也并不适用于任意的索引类型，索引必须存储列的值。Hash, spatial, 和full-text索引不存储值，因此MySQL只能使用B-TREE。并且不同的存储引擎实现覆盖索引都是不同的。并不是所有的存储引擎都支持它们。</div>
<div>当一个查询被索引所覆盖。（an index-covered query）。你使用EXPLAIN就会发现EXTRA列的值为“Using index”。一个例子，sakila.inventory表由一个多列的索引在store_id, film_id的列上。MySQL能使用索引来访问这两列。如下</div>
<div>
<div>mysql&gt; EXPLAIN SELECT store_id, film_id FROM sakila.inventory\G</div>
<div>*************************** 1. row ***************************</div>
<div>id: 1</div>
<div>select_type: SIMPLE</div>
<div>table: inventory</div>
<div>type: index</div>
<div>possible_keys: NULL</div>
<div>key: idx_store_id_film_id</div>
<div>key_len: 3</div>
<div>ref: NULL</div>
<div>rows: 4673</div>
<div>Extra: Using index</div>
</div>
<div>覆盖索引的语句有些诡异的是会关闭优化。MySQL语句优化器在执行语句之前会决定是否有一个索引覆盖它。假使这个索引覆盖了一个WHERE条件，但是并不是整个查询。如果这个条件评估为false，MySQL51以及以前版本都会取出行。</div>
<div>让我们来看看为什么会这样。以及怎样重写这个查询来解决上面所说的问题。</div>
<div>
<div>mysql&gt; EXPLAIN SELECT * FROM products WHERE actor=&#8217;SEAN CARREY&#8217;</div>
<div>-&gt; AND title like &#8216;%APOLLO%&#8217;\G</div>
<div>*************************** 1. row ***************************</div>
<div>id: 1</div>
<div>select_type: SIMPLE</div>
<div>table: products</div>
<div>type: ref</div>
<div>possible_keys: ACTOR,IX_PROD_ACTOR</div>
<div>key: ACTOR</div>
<div>key_len: 52</div>
</div>
<div>
<div>ref: const</div>
<div>rows: 10</div>
<div>Extra: Using where</div>
</div>
<div>这个索引不能覆盖这个查询有如下两条原因：</div>
<ul>
<li>没有索引覆盖这个查询，因为我们选择了这个表的所有列，并且没有一个索引覆盖这些列。理论上来说MySQL还能使用一个捷径：WHERE条件中有一列被索引覆盖，因此MySQL会使用索引先找到这个actor并且检查title是否匹配，之后再取整个行。</li>
<li>MySQL不能在索引中执行LIKE操作符。这个受限于底层的存储引擎API。在索引的操作，这只能支持简单的比较。MySQL可以LIKE中匹 配前缀，因为把它们转为简单的比较了。但是这个例子中前缀的通配符使使用索引查询变为了不可能。最终。MySQL服务器将会获取和匹配这个行的值，而不是 索引的值。</li>
</ul>
<div>我们可以使用加索引（artist, title, prod_id）和重写查询来解决上面的问题。重写的查询如下</div>
<div>
<div>mysql&gt; EXPLAIN SELECT *</div>
<div>-&gt; FROM products</div>
<div>-&gt; &nbsp; &nbsp;JOIN (</div>
<div>-&gt; &nbsp; &nbsp; &nbsp; SELECT prod_id</div>
<div>-&gt; &nbsp; &nbsp; &nbsp; FROM products</div>
<div>-&gt; &nbsp; &nbsp; &nbsp; WHERE actor=&#8217;SEAN CARREY&#8217; AND title LIKE &#8216;%APOLLO%&#8217;</div>
<div>-&gt; &nbsp; &nbsp;) AS t1 ON (t1.prod_id=products.prod_id)\G</div>
</div>
<div>
<div>*************************** 1. row ***************************</div>
<div>id: 1</div>
<div>select_type: PRIMARY</div>
<div>table: &lt;derived2&gt;</div>
<div>&#8230;omitted&#8230;</div>
<div>*************************** 2. row ***************************</div>
<div>id: 1</div>
<div>select_type: PRIMARY</div>
<div>table: products</div>
<div>&#8230;omitted&#8230;</div>
<div>*************************** 3. row ***************************</div>
<div>id: 2</div>
<div>select_type: DERIVED</div>
<div>table: products</div>
<div>type: ref</div>
<div>possible_keys: ACTOR,ACTOR_2,IX_PROD_ACTOR</div>
<div>key: ACTOR_2</div>
<div>key_len: 52</div>
<div>ref:</div>
<div>rows: 11</div>
<div>Extra: Using where; <b>Using index</b></div>
</div>
<div>现在MySQL在第一阶段的查询使用了覆盖索引，当它找到了在子查询匹配的行的时候。它不会在这个执行语句使用索引。但是总比没有强。</div>
<div>这个优化的有效性完全依靠于有多少行被找到。假使products表包含了1百万行。让我们来看看不同数据集下这两个查询的表现。</div>
<div>
<ol>
<li>第一个，Sean Carrey有30000个产品并且title包含Apollo有2000行。</li>
<li>第二个，分别是30000和40</li>
<li>第三个，分别是50和10</li>
</ol>
</div>
<div>测试结果如下</div>
<div>
<div>Dataset &nbsp; &nbsp; Original query &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Optimized query</div>
<div>Example1 &nbsp;5 queries per sec &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 queries per sec</div>
<div>Example2 &nbsp;7 queries per sec &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;35 queries per sec</div>
<div>Example3 &nbsp;2400 queries per sec &nbsp; &nbsp; &nbsp;2000 queries per sec</div>
</div>
<div>让我们解释下结果</div>
<div>
<ul>
<li>在例子一中，返回的大数据集。并没有看到优化效果。大部分时间花在读取和发送数据上了。</li>
<li>例子二中，在索引过滤后，第二个条件过滤了很少的数据，让我们看看语句的油画效果：是没优化的语句的5倍之多！效率高的原因是第二个语句仅仅需要查找40行而不是30000行。</li>
<li>第三个例子中，知道了子查询是低效的。在索引过滤数据非常小的情况下，子查询的消耗大于了直接从整张表查询所有数据的消耗。</li>
</ul>
</div>
<div>在MySQL5.1以及之前的版本中，这个优化有的时候可以避免读取没有必要的行。MySQL6.0就会避免一些额外的语句。如果升级的话，就不必优化了。</div>
<div>在大多数的存储引擎中，一个索引所覆盖仅仅是访问列是索引的一部分的查询语句。然而，InnoDB可以使优化更进一步。回忆一下，InnoDB 的次要索引在叶子节点中保存了主键的值。意味着InnoDB次要索引可由一个额外的列了。InnoDB就可以使用这一特性来覆盖查询语句了。</div>
<div>举个例子，sakila.actor 表使用了InnoDB并且在last_name有个索引。因此这个索引能覆盖语句来获取主键的值actor_id，即使这一列技术上并不是索引的一部分。</div>
<div>
<div>mysql&gt; EXPLAIN SELECT actor_id, last_name</div>
<div>-&gt; FROM sakila.actor WHERE last_name = &#8216;HOPPER&#8217;\G</div>
</div>
<div>
<div>*************************** 1. row ***************************</div>
<div>id: 1</div>
<div>select_type: SIMPLE</div>
<div>table: actor</div>
<div>type: ref</div>
<div>possible_keys: idx_actor_last_name</div>
<div>key: idx_actor_last_name</div>
<div>key_len: 137</div>
<div>ref: const</div>
<div>rows: 2</div>
<div>Extra: Using where; Using index</div>
</div>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/07/27/2058/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/07/27/2058/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/07/27/2058/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/07/27/2058/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/07/27/2058/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/22/778/" title="提高MySQL 查询效率的三个技巧 (2009年04月22日)">提高MySQL 查询效率的三个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/10/2371/" title="Web应用中的轻量级消息队列-MySQL (2009年11月10日)">Web应用中的轻量级消息队列-MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2333/" title="MySQL语句优化的原则 (2009年10月22日)">MySQL语句优化的原则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2330/" title="MySql索引优化注意 (2009年10月22日)">MySql索引优化注意</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/10/22/2335/" title="MySQL最好的优化技巧 (2009年10月22日)">MySQL最好的优化技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/53/" title="mysql日期和时间格式转换 (2009年03月31日)">mysql日期和时间格式转换</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/14/3981/" title="MySQL-Front v5 注册码,注册机。 (2010年06月14日)">MySQL-Front v5 注册码,注册机。</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/07/27/2058/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>40+ Web前端开发必备的备忘单[上]</title>
		<link>http://www.iwanna.cn/archives/2009/06/30/1894/</link>
		<comments>http://www.iwanna.cn/archives/2009/06/30/1894/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 03:08:17 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=1894</guid>
		<description><![CDATA[Cheat Sheet 一词在中文中并没有很贴切的对译，大概是考试作弊条一类的东西，这要求 Cheat Sheet 必须短小精悍又覆盖广泛，作为 Web 开发与设计师，免不了在工作时查询大量资料，某个 Web 色值，某个 JavaScript 库的核心语法，这类资料如果攒齐了，怕有半间屋子那么多，如果用 Cheet Sheet 也许几十页纸就够了，本文收集了近百份用于 Web 开发与设计的 Cheet Sheet，你会发现他们非常实用。
HTML, XHTML, CSS2
CSS2 Cheat Sheet
 

不仅是一份完整的 CSS2 速查手册，还让你了解每个属性该怎么用。预览 &#124;  下载 （PDF）
Gosquared CSS help sheets
设计和结构都很整齐，漂亮。下载（PDF）

addedbytes CSS2 Cheat Sheet
该速查手册只有一页纸，包含 CSS 2.1 全部选择器和属性，还包含一个盒子模型示例。下载（PDF &#124; PNG）

Core css
将 CSS 的核心知识分成3部分，包含了 CSS 的方方面面。下载 （需免费注册）


CSS Shorthand Cheat Sheet
一些不容易记住的 CSS 元素。下载 （PDF）
CSS2 – Quick [...]]]></description>
			<content:encoded><![CDATA[<p>Cheat Sheet 一词在中文中并没有很贴切的对译，大概是考试作弊条一类的东西，这要求 Cheat Sheet 必须短小精悍又覆盖广泛，作为 Web 开发与设计师，免不了在工作时查询大量资料，某个 Web 色值，某个 JavaScript 库的核心语法，这类资料如果攒齐了，怕有半间屋子那么多，如果用 Cheet Sheet 也许几十页纸就够了，本文收集了近百份用于 Web 开发与设计的 Cheet Sheet，你会发现他们非常实用。</p>
<h3 class="subtitle">HTML, <a href="http://www.iwanna.cn/tags/xhtml/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with XHTML">XHTML</a>, CSS2</h3>
<h4><a href="http://acodingfool.typepad.com/blog/css-cheat-sheet.html" target="_blank">CSS2 Cheat Sheet</a></h4>
<p><a title="CSS Cheat Sheet - Page 1" rel="thumbnail" href="http://acodingfool.typepad.com/blog/images/cheatsheets/css_cheatsheet_v2_pg1_large.jpg"><img class="image" style="border: 1px solid black;" src="http://acodingfool.typepad.com/blog/images/cheatsheets/css_cheatsheet_v2_pg1_small.jpg" alt="" /></a> <a title="CSS Cheat Sheet - Page 2" rel="thumbnail" href="http://acodingfool.typepad.com/blog/images/cheatsheets/css_cheatsheet_v2_pg2_large.jpg"><img class="image" style="border: 1px solid black;" src="http://acodingfool.typepad.com/blog/images/cheatsheets/css_cheatsheet_v2_pg2_small.jpg" alt="" /></a><br />
<span id="more-1894"></span><br />
不仅是一份完整的 CSS2 速查手册，还让你了解每个属性该怎么用。<a href="http://acodingfool.typepad.com/blog/css-cheat-sheet.html">预览</a> |  <a href="http://acodingfool.typepad.com/blog/pdf/css_cheatsheet_v2.pdf">下载</a> （PDF）</p>
<h4><a href="http://www.gosquared.com/images/help_sheets/CSS%20Help%20Sheet%2002.pdf" target="_blank">Gosquared CSS help sheets</a></h4>
<p>设计和结构都很整齐，漂亮。<a href="http://www.gosquared.com/images/help_sheets/CSS%20Help%20Sheet%2002.pdf">下载（PDF）</a></p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/css_help_sheets.jpg" alt="CHEAT_SHEETS" width="621" height="392" /></h4>
<h4><a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/" target="_blank">addedbytes CSS2 Cheat Sheet</a></h4>
<p>该速查手册只有一页纸，包含 <a href="http://www.iwanna.cn/tags/css/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with CSS">CSS</a> 2.1 全部选择器和属性，还包含一个盒子模型示例。下载（<a href="http://www.addedbytes.com/download/css-cheat-sheet-v2/pdf/">PDF</a> | <a href="http://www.addedbytes.com/download/css-cheat-sheet-v2/png/">PNG</a>）</p>
<p><img style="border: 1px solid black;" src="http://www.addedbytes.com/cheat-sheets/thumbnails/css_v2_plain.png" alt="" /></p>
<h4><a href="http://refcardz.dzone.com/refcardz/corecss-part1" target="_blank">Core css</a></h4>
<p>将 <a href="http://www.iwanna.cn/tags/css/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with CSS">CSS</a> 的核心知识分成3部分，包含了 <a href="http://www.iwanna.cn/tags/css/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with CSS">CSS</a> 的方方面面。<a href="http://refcardz.dzone.com/assets/request/refcard/4784?oid=lan4784&amp;uid=0">下载</a> （需免费注册）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/corecss-part1.jpg" alt="core css" width="620" height="415" /></h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/corecss-part3.jpg" alt="core css" width="621" height="517" /></h4>
<h4><a href="http://www.eddiewelker.com/wp-content/uploads/2007/09/csscheatsheet.pdf" target="_blank">CSS Shorthand Cheat Sheet</a></h4>
<p>一些不容易记住的 <a href="http://www.iwanna.cn/tags/css/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with CSS">CSS</a> 元素。<a href="http://www.eddiewelker.com/wp-content/uploads/2007/09/csscheatsheet.pdf">下载</a> （PDF）</p>
<h4><a href="http://www.veign.com/downloads/guides/qrg0007.pdf">CSS2 – Quick Reference Guide – PDF</a> <a href="http://www.veign.com/downloads/guides/qrg0007.pdf">下载</a>（PDF）</h4>
<h4><a href="http://acodingfool.typepad.com/blog/2009/01/xhtml.html" target="_blank">XHTML 1.1 Cheat Sheet</a></h4>
<p><a href="http://www.w3.org/TR/xhtml11/" target="_blank">XHTML 1.1</a> 细则中涉及到的所有元素与属性。<a href="http://acodingfool.typepad.com/blog/xhtml-11-cheat-sheet.html">预览</a> | <a href="http://acodingfool.typepad.com/blog/pdf/xhtml_1.1_cheatsheet_v3.pdf">下载</a></p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/xhtml_1_1_cheatsheet.jpg" alt="CHEAT_SHEETS" width="620" height="413" /></h4>
<h4><a href="http://www.gosquared.com/images/help_sheets/HTML%20Help%20Sheet%2002.pdf" target="_blank">Gosquared html help sheets</a></h4>
<p>设计漂亮，结构精良的 HTML 速查。<a href="http://www.gosquared.com/images/help_sheets/HTML%20Help%20Sheet%2002.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/html-help_sheets.jpg" alt="CHEAT_SHEETS" width="620" height="413" /></h4>
<h4><a href="http://www.addedbytes.com/cheat-sheets/html-cheat-sheet/" target="_blank">HTML Cheat Sheet</a></h4>
<p>一份 A4 纸大小的单页 HTML 速查表。下载 （<a href="http://www.addedbytes.com/download/html-cheat-sheet-v1/pdf/" target="_blank">PDF</a> | <a href="http://www.addedbytes.com/download/html-cheat-sheet-v1/png/" target="_blank">PNG</a>）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/html.jpg" alt="CHEAT_SHEETS" width="621" height="348" /></h4>
<h4><a href="http://blog.nihilogic.dk/2009/02/html5-canvas-cheat-sheet.html" target="_blank">HTML5 Canvas Cheat Sheet</a></h4>
<p>HTML5 Canvas 对象的速查手册，直接编译自 <a href="http://www.whatwg.org/specs/web-apps/current-work/" target="_blank">WHATWG specs</a> 细则，只是更容易阅读一些。下载 （<a href="http://www.nihilogic.dk/labs/canvas_sheet/HTML5_Canvas_Cheat_Sheet.pdf">PDF</a> | <a href="http://www.nihilogic.dk/labs/canvas_sheet/HTML5_Canvas_Cheat_Sheet.png">PNG</a>）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/Canvas_Cheat_Sheet.jpg" alt="CHEAT_SHEETS" width="621" height="341" /></h4>
<h4><a href="http://www.addedbytes.com/cheat-sheets/html-character-entities-cheat-sheet/" target="_blank">HTML Character Entities Cheat Sheet</a></h4>
<p>HTML 字符标识速查。下载 （ <a href="http://www.addedbytes.com/download/html-character-entities-cheat-sheet/pdf/" target="_blank">PDF</a> | <a href="http://www.addedbytes.com/download/html-character-entities-cheat-sheet/png/" target="_blank">PNG</a>）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/html-character-entities.jpg" alt="CHEAT_SHEETS" width="621" height="391" /></h4>
<h4><a href="http://acodingfool.typepad.com/blog/html-character-entities-cheat-sheet.html" target="_blank">HTML Character Entities Cheat Sheet</a></h4>
<p>该表包含 <a href="http://www.w3.org/TR/html4/sgml/entities.html">HTML 4 字符标识</a>，包括 ISO8859-1 (Latin-1)  中的字符。<a href="http://acodingfool.typepad.com/blog/html-character-entities-cheat-sheet.html">预览</a> | <a href="http://acodingfool.typepad.com/blog/pdf/html_entities_cheatsheet_v3.pdf">下载</a><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/html_entities_cheatsheet.jpg" alt="CHEAT_SHEETS" width="621" height="400" /></p>
<h4><a href="http://acodingfool.typepad.com/blog/html-colors-cheat-sheet.html" target="_blank">HTML Colors Cheat Sheet</a></h4>
<p>该  HTML 颜色表包含 1050 种颜色，按色度区分，每个色度包含25中不同饱和度与亮度。还包含216种 Web 安全色。<a href="http://acodingfool.typepad.com/blog/html-colors-cheat-sheet.html">预览</a> | <a href="http://acodingfool.typepad.com/blog/pdf/html_colors_cheatsheet_v2.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/html_colors_cheatsheet.jpg" alt="CHEAT_SHEETS" width="621" height="799" /></h4>
<h4><a href="http://www.addedbytes.com/cheat-sheets/colour-chart/">RGB Hex Colour Chart</a></h4>
<p>RGB 16进制颜色表。包含216种 Web 安全色。下载 （<a href="http://www.addedbytes.com/download/rgb-hex-cheat-sheet-v1/png/">PNG</a> | <a href="http://www.addedbytes.com/download/rgb-hex-cheat-sheet-v1/pdf/">PDF</a>）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/rgb-hex-cheat.jpg" alt="CHEAT_SHEETS" width="621" height="350" /></h4>
<h3 class="subtitle">Scripting 速查手册</h3>
<h4><a href="http://www.addedbytes.com/cheat-sheets/javascript-cheat-sheet/" target="_blank">JavaScript Cheat Sheet</a></h4>
<p>包含 JavaScript 的 的方法与函数，正则表单时，以及 XMLHttpRequest  对象。下载（<a href="http://www.addedbytes.com/download/javascript-cheat-sheet-v1/png/">PNG</a> | <a href="http://www.addedbytes.com/download/javascript-cheat-sheet-v1/pdf/">PDF</a>）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/javascript.jpg" alt="CHEAT_SHEETS" width="621" height="305" /></h4>
<h4><a href="http://www.wait-till-i.com/stuff/JavaScript-DOM-Cheatsheet.pdf" target="_blank">JavaScript DOM Cheatsheet</a></h4>
<p>JavaScript DOM 结构速查手册。<a href="http://www.wait-till-i.com/stuff/JavaScript-DOM-Cheatsheet.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/javascript-dom.jpg" alt="CHEAT_SHEETS" width="621" height="326" /></h4>
<h4><a href="http://acodingfool.typepad.com/blog/2009/01/jquery-13-cheat-sheet.html">jQuery 1.3 Cheat Sheet</a></h4>
<p><a href="http://www.iwanna.cn/tags/jquery/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with JQuery">jQuery</a> 1.3 速查表。<a href="http://acodingfool.typepad.com/blog/jquery-13-cheat-sheet.html">预览</a> | <a href="http://acodingfool.typepad.com/blog/pdf/jquery_1.3_cheatsheet_v1.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/acodingfooljquery.jpg" alt="CHEAT_SHEETS" width="621" height="379" /></h4>
<h4><a href="http://www.cheat-sheets.org/saved-copy/Jquery-Cheat-Sheet-1.2.pdf" target="_blank">jQuery Cheat Sheet 1.2</a> <a href="http://www.iwanna.cn/tags/jquery/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with JQuery">jQuery</a> 1.2 速查手册 <a href="http://www.cheat-sheets.org/saved-copy/Jquery-Cheat-Sheet-1.2.pdf">下载</a>（PDF）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/jquery-1-2.jpg" alt="CHEAT_SHEETS" width="621" height="322" /></h4>
<h4><a href="http://mediavrog.net/blog/2008/06/11/mootools/mootools-12-cheat-sheet/" target="_blank">mootools 1.2 cheat sheet</a></h4>
<p>另一个 JavaScript 库 MooTools 1.2 速查手册。<a href="http://mediavrog.net/blog/wp-content/uploads/2008/08/mootools-12-cheat-sheet-pf.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/mootools.jpg" alt="CHEAT_SHEETS" /></h4>
<h4><a href="http://www.snook.ca/files/prototype_1.5.0_snookca.pdf" target="_blank">prototype 1.5.0</a> JavaScript 库 <a href="http://www.iwanna.cn/tags/prototype/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Prototype">Prototype</a> 1.5 速查手册。<a href="http://www.snook.ca/files/prototype_1.5.0_snookca.pdf">下载</a> （PDF）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/prototype.jpg" alt="CHEAT_SHEETS" width="620" height="384" /></h4>
<h4><a title="Permanent Link to Prototype 1.6.0.2 Cheat Sheet" rel="bookmark" href="http://thinkweb2.com/projects/prototype/prototype-1602-cheat-sheet/" target="_blank">Prototype 1.6.0.2 Cheat Sheet</a></h4>
<p>JavaScript 库 <a href="http://www.iwanna.cn/tags/prototype/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Prototype">Prototype</a> 1.6.0.2 速查手册。<a href="http://thinkweb2.com/projects/prototype/downloads/Prototype%20Cheat%20Sheet%201.6.0.2">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/prototype_cheatsheet_1.6.0.2.jpg" alt="CHEAT_SHEETS" width="620" height="369" /></h4>
<h4><a href="http://wps.aw.com/wps/media/objects/2234/2287950/javascript_refererence.pdf" target="_blank">Addison-Wesley’s JavaScript Reference Card</a></h4>
<p>JavaScript 参考手册。<a href="http://wps.aw.com/wps/media/objects/2234/2287950/javascript_refererence.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/javascript_refererence.jpg" alt="CHEAT_SHEETS" width="620" height="321" /></h4>
<h4><a href="http://refcardz.dzone.com/refcardz/jquery-selectors" target="_blank">jQuery selectors</a></h4>
<p>对 <a href="http://www.iwanna.cn/tags/jquery/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with JQuery">jQuery</a> 开发者来说，该速查手册不可或缺，详细列举了 <a href="http://www.iwanna.cn/tags/jquery/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with JQuery">jQuery</a> 所有选择器。<a href="http://refcardz.dzone.com/assets/request/refcard/3088?oid=lan3088&amp;uid=0">下载</a> （徐免费注册）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/jquery-selectors.jpg" alt="CHEAT_SHEETS" width="621" height="442" /></h4>
<p><!--more--></p>
<h3 class="subtitle">服务器端编程</h3>
<h4><a href="http://www.addedbytes.com/cheat-sheets/php-cheat-sheet/" target="_blank">PHP Cheat Sheet (V2)</a></h4>
<p>单页 PHP 参考手册，包含日期格式，正则表达式以及常用函数。下载 （<a href="http://www.addedbytes.com/download/php-cheat-sheet-v2/pdf/">PDF</a> | <a href="http://www.addedbytes.com/download/php-cheat-sheet-v2/png/">PNG</a>）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/php.jpg" alt="CHEAT_SHEETS" width="621" height="327" /></h4>
<h4><a href="http://www.visibone.com/php/" target="_blank">visibone</a></h4>
<p>该站包含2页基本PHP速查手册，以及8页高级速查手册。非免费。</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/phpskinnysheetback.jpg" alt="CHEAT_SHEETS" width="621" height="369" /></h4>
<h4><a href="http://www.stevengould.org/portfolio/independent/php-refcard/PHPRefCard.pdf" target="_blank">Php 4 Reference Card</a> PHP4 参考速查手册。<a href="http://www.stevengould.org/portfolio/independent/php-refcard/PHPRefCard.pdf">下载</a>（PDF）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/php4.jpg" alt="CHEAT_SHEETS" width="621" height="339" /></h4>
<h4 style="margin: 0px; padding: 0px;"><a href="http://www.blueshoes.org/en/developer/php_cheat_sheet/" target="_blank">PHP Cheat Sheet</a></h4>
<p>PHP 比较操作速查手册。<a href="http://www.blueshoes.org/en/developer/php_cheat_sheet/">下载</a></p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/php_cheat_sheet.jpg" alt="CHEAT_SHEETS" width="620" height="343" /></h4>
<h4><a href="http://www.digilife.be/quickreferences/QRC/Core%20CSharp%20and%20.NET%20Quick%20Reference.pdf" target="_blank">Core C# and .NET Quick Reference</a> C# 与 .NET 速查参考手册。<a href="http://www.digilife.be/quickreferences/QRC/Core%20CSharp%20and%20.NET%20Quick%20Reference.pdf">下载</a>（PDF）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/csharp.jpg" alt="CHEAT_SHEETS" width="620" height="342" /></h4>
<h4><a href="http://john-sheehan.com/blog/wp-content/uploads/aspnet-life-cycles-events.pdf" target="_blank">ASP.net</a> ASP<a href="http://www.iwanna.cn/tags/net/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with .Net">.NET</a> 速查参考手册。<a href="http://john-sheehan.com/blog/wp-content/uploads/aspnet-life-cycles-events.pdf">下载</a></h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/aspnet.jpg" alt="CHEAT_SHEETS" width="621" height="353" /></h4>
<h4><a href="http://www.addedbytes.com/cheat-sheets/asp-vbscript-cheat-sheet/" target="_blank">MS ASP</a> 古老的 ASP 与 VB Script 速查手册。下载（<a href="http://www.addedbytes.com/download/asp-cheat-sheet-v1/png/">PNG</a> | <a href="http://www.addedbytes.com/download/asp-cheat-sheet-v1/pdf/">PDF</a>）</h4>
<p><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/asp.jpg" alt="CHEAT_SHEETS" width="621" height="368" /></p>
<h4><a href="http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf" target="_blank">msnet formatting strings</a> 微软 .NET 字符串格式化速查。<a href="http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf">下载</a>（PDF）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/dotnet.jpg" alt="CHEAT_SHEETS" width="621" height="354" /></h4>
<h4><a href="http://www.sql.su/" target="_blank">SQL (Structured Query Language) in one page</a> <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> 语言速查。<a href="http://www.sql.su/">直接访问</a></h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/sql.jpg" alt="CHEAT_SHEETS" width="620" height="343" /></h4>
<h4><a href="http://www.addedbytes.com/cheat-sheets/mysql-cheat-sheet/" target="_blank">MySQL Cheat Sheet</a> MySQL 速查。下载（<a href="http://www.addedbytes.com/download/mysql-cheat-sheet-v1/png/">PNG</a> | <a href="http://www.addedbytes.com/download/mysql-cheat-sheet-v1/pdf/">PDF</a>）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/mysql.jpg" alt="CHEAT_SHEETS" width="621" height="290" /></h4>
<h4><a href="http://www.xml.su/" target="_blank">XML (eXtensible Markup Language) in one page</a> XML 单页速查手册。<a href="http://www.xml.su/">直接访问</a></h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/xml.jpg" alt="CHEAT_SHEETS" width="620" height="343" /></h4>
<h4><a href="http://www.mulberrytech.com/quickref/XMLquickref.pdf" target="_blank">XML Syntax Quick Reference</a> XML 语法参考。<a href="http://www.mulberrytech.com/quickref/XMLquickref.pdf">下载</a>（PDF）</h4>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/XMLquickref.jpg" alt="CHEAT_SHEETS" width="621" height="319" /></h4>
<h3 class="subtitle">SEO 速查手册</h3>
<h4><a href="http://www.seomoz.org/blog/the-web-developers-seo-cheat-sheet">The Web Developer’s SEO Cheat Sheet</a></h4>
<p>出自 SEO MOZ 的 SEO 速查手册，包括重要的 SEO HTML 标签，搜索引擎索引的限制，Title 标签语法建议等。<a href="http://www.seomoz.org/user_files/SEO_Web_Developer_Cheat_Sheet.pdf">下载</a>（PDF）</p>
<h4><img src="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/cheat-sheets/soemoz.jpg" alt="CHEAT_SHEETS" width="621" height="380" /></h4>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/06/30/1894/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/06/30/1894/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/06/30/1894/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/06/30/1894/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/06/30/1894/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/color/" title="Color" rel="tag nofollow">Color</a>, <a href="http://www.iwanna.cn/tags/css/" title="CSS" rel="tag nofollow">CSS</a>, <a href="http://www.iwanna.cn/tags/dom/" title="DOM" rel="tag nofollow">DOM</a>, <a href="http://www.iwanna.cn/topics/ui/javascript/" title="JavaScript" rel="tag nofollow">JavaScript</a>, <a href="http://www.iwanna.cn/topics/ui/javascript/jquery/" title="JQuery" rel="tag nofollow">JQuery</a>, <a href="http://www.iwanna.cn/tags/jquery/" title="JQuery" rel="tag nofollow">JQuery</a>, <a href="http://www.iwanna.cn/tags/mootools/" title="Mootools" rel="tag nofollow">Mootools</a>, <a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a>, <a href="http://www.iwanna.cn/topics/develope/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/tags/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/topics/ui/javascript/prototype/" title="Prototype" rel="tag nofollow">Prototype</a>, <a href="http://www.iwanna.cn/tags/prototype/" title="Prototype" rel="tag nofollow">Prototype</a>, <a href="http://www.iwanna.cn/tags/seo/" title="SEO" rel="tag nofollow">SEO</a>, <a href="http://www.iwanna.cn/topics/develope/seo-develope/" title="SEO" rel="tag nofollow">SEO</a>, <a href="http://www.iwanna.cn/topics/develope/sql/" title="Sql" rel="tag nofollow">Sql</a>, <a href="http://www.iwanna.cn/tags/sql/" title="Sql" rel="tag nofollow">Sql</a>, <a href="http://www.iwanna.cn/topics/software/tool/" title="Tool" rel="tag nofollow">Tool</a>, <a href="http://www.iwanna.cn/tags/tool/" title="Tool" rel="tag nofollow">Tool</a>, <a href="http://www.iwanna.cn/tags/xhtml/" title="XHTML" rel="tag nofollow">XHTML</a>, <a href="http://www.iwanna.cn/tags/xml/" title="XML" rel="tag nofollow">XML</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/06/05/1728/" title="为什么在网页设计中清洁代码如此重要？ (2009年06月5日)">为什么在网页设计中清洁代码如此重要？</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/05/1933/" title="用 PHP 读取和编写 XML DOM (2009年07月5日)">用 PHP 读取和编写 XML DOM</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/07/991/" title="更好遵循DIV+CSS设计 网站重构中实现SEO (2009年05月7日)">更好遵循DIV+CSS设计 网站重构中实现SEO</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/30/11/" title="MySQL 搜索中的大小写敏感性 (2009年03月30日)">MySQL 搜索中的大小写敏感性</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/03/1696/" title="14个验证HTML，css及RSS Feeds的免费工具 (2009年06月3日)">14个验证HTML，css及RSS Feeds的免费工具</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/17/1828/" title="用jQuery和CSS构建下拉菜单 (2009年06月17日)">用jQuery和CSS构建下拉菜单</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/09/280/" title="几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比 (2009年04月9日)">几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/24/1129/" title="八种布局方案改善你的设计 (2009年05月24日)">八种布局方案改善你的设计</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/27/4767/" title="一个基于JQuery 和CSS3的滑动菜单 (2010年07月27日)">一个基于JQuery 和CSS3的滑动菜单</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/06/30/1894/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>提高MySQL 查询效率的三个技巧</title>
		<link>http://www.iwanna.cn/archives/2009/04/22/778/</link>
		<comments>http://www.iwanna.cn/archives/2009/04/22/778/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 05:25:42 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Skill]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=778</guid>
		<description><![CDATA[MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变 化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试.
l 使用statement进行绑定查询
使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查询条件固定但查询非常频繁的场合.
使用方法是:

绑定, 创建一个MYSQL_STMT变量,与对应的查询字符串绑定,字符串中的问号代表要传入的变量,每个问号都必须指定一个变量.
查询, 输入每个指定的变量, 传入MYSQL_STMT变量用可用的连接句柄执行.

代码如下:

//1.绑定
bool CDBManager::BindInsertStmt(MYSQL * connecthandle)
{
 //作插入操作的绑定
 MYSQL_BIND insertbind[FEILD_NUM];
 if(m_stInsertParam == NULL)
 m_stInsertParam = new CHostCacheTable;
 m_stInsertStmt = mysql_stmt_init(connecthandle);
 //构建绑定字符串
 char insertSQL[SQL_LENGTH];
 strcpy(insertSQL, &#8220;insert into HostCache(SessionID, ChannelID, ISPType, &#8221;
 &#8220;ExternalIP, ExternalPort, InternalIP, InternalPort) &#8221;
 &#8220;values(?, ?, ?, ?, ?, ?, ?)&#8221;);
 mysql_stmt_prepare(m_stInsertStmt, insertSQL, strlen(insertSQL));
 int param_count= mysql_stmt_param_count(m_stInsertStmt);
 if(param_count != FEILD_NUM)
 [...]]]></description>
			<content:encoded><![CDATA[<div>MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变 化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试.</div>
<div><span>l </span>使用statement进行绑定查询</div>
<div>使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查询条件固定但查询非常频繁的场合.</div>
<div>使用方法是:</div>
<ol>
<li>绑定, 创建一个MYSQL_STMT变量,与对应的查询字符串绑定,字符串中的问号代表要传入的变量,每个问号都必须指定一个变量.</li>
<li>查询, 输入每个指定的变量, 传入MYSQL_STMT变量用可用的连接句柄执行.</li>
</ol>
<div>代码如下:</div>
<p><span id="more-778"></span></p>
<div>//1.绑定</div>
<div>bool CDBManager::BindInsertStmt(MYSQL * connecthandle)</div>
<div>{</div>
<p> //</span>作插入操作的绑定</div>
<p> MYSQL_BIND insertbind[FEILD_NUM];<br />
 if(m_stInsertParam == NULL)<br />
 m_stInsertParam = new CHostCacheTable;<br />
 m_stInsertStmt = mysql_stmt_init(connecthandle);<br />
 //</span>构建绑定字符串</div>
<p> char insertSQL[SQL_LENGTH];<br />
 strcpy(insertSQL, &#8220;insert into HostCache(SessionID, ChannelID, ISPType, &#8221;<br />
 &#8220;ExternalIP, ExternalPort, InternalIP, InternalPort) &#8221;<br />
 &#8220;values(?, ?, ?, ?, ?, ?, ?)&#8221;);<br />
 mysql_stmt_prepare(m_stInsertStmt, insertSQL, strlen(insertSQL));<br />
 int param_count= mysql_stmt_param_count(m_stInsertStmt);<br />
 if(param_count != FEILD_NUM)<br />
 return false;<br />
 //</span>填充bind结构数组, m_sInsertParam是这个statement关联的结构变量</div>
<p> memset(insertbind, 0, sizeof(insertbind));<br />
 insertbind[0].buffer_type = MYSQL_TYPE_STRING;<br />
 insertbind[0].buffer_length = ID_LENGTH /* -1 */;<br />
 insertbind[0].buffer = (char *)m_stInsertParam-&gt;sessionid;<br />
 insertbind[0].is_null = 0;<br />
 insertbind[0].length = 0;<br />
 insertbind[1].buffer_type = MYSQL_TYPE_STRING;<br />
 insertbind[1].buffer_length = ID_LENGTH /* -1 */;<br />
 insertbind[1].buffer = (char *)m_stInsertParam-&gt;channelid;<br />
 insertbind[1].is_null = 0;<br />
 insertbind[1].length = 0;<br />
 insertbind[2].buffer_type = MYSQL_TYPE_TINY;<br />
 insertbind[2].buffer = (char *)&amp;m_stInsertParam-&gt;ISPtype;<br />
 insertbind[2].is_null = 0;<br />
 insertbind[2].length = 0;<br />
 insertbind[3].buffer_type = MYSQL_TYPE_LONG;<br />
 insertbind[3].buffer = (char *)&amp;m_stInsertParam-&gt;externalIP;<br />
 insertbind[3].is_null = 0;<br />
 insertbind[3].length = 0;</p>
<p> insertbind[4].buffer_type = MYSQL_TYPE_SHORT;<br />
 insertbind[4].buffer = (char *)&amp;m_stInsertParam-&gt;externalPort;<br />
 insertbind[4].is_null = 0;<br />
 insertbind[4].length = 0;<br />
 insertbind[5].buffer_type = MYSQL_TYPE_LONG;<br />
 insertbind[5].buffer = (char *)&amp;m_stInsertParam-&gt;internalIP;<br />
 insertbind[5].is_null = 0;<br />
 insertbind[5].length = 0;<br />
 insertbind[6].buffer_type = MYSQL_TYPE_SHORT;<br />
 insertbind[6].buffer = (char *)&amp;m_stInsertParam-&gt;internalPort;<br />
 insertbind[6].is_null = 0;<br />
 insertbind[6].is_null = 0;<br />
 //</span>绑定</div>
<p> if (mysql_stmt_bind_param(m_stInsertStmt, insertbind))<br />
 return false;<br />
 return true;</p>
<div>}</div>
<div>//2.查询</div>
<div>bool CDBManager::InsertHostCache2(MYSQL * connecthandle, char * sessionid, char * channelid, int ISPtype, \</div>
<p> unsigned int eIP, unsigned short eport, unsigned int iIP, unsigned short iport)</p>
<div>{</div>
<p> //</span>填充结构变量m_sInsertParam</div>
<p> strcpy(m_stInsertParam-&gt;sessionid, sessionid);<br />
 strcpy(m_stInsertParam-&gt;channelid, channelid);<br />
 m_stInsertParam-&gt;ISPtype = ISPtype;<br />
 m_stInsertParam-&gt;externalIP = eIP;<br />
 m_stInsertParam-&gt;externalPort = eport;<br />
 m_stInsertParam-&gt;internalIP = iIP;<br />
 m_stInsertParam-&gt;internalPort = iport;<br />
 //</span>执行statement,性能瓶颈处</div>
<p> if(mysql_stmt_execute(m_stInsertStmt))<br />
 return false;<br />
 return true;</p>
<div>}</div>
<div><span>l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span>随机的获取记录</div>
<div style="text-indent: 21pt;">在某些数据库的应用中, 我们并不是要获取所有的满足条件的记录,而只是要随机挑选出满足条件的记录. 这种情况常见于数据业务的统计分析,从大容量数据库中获取小量的数据的场合.</div>
<p> </span>有两种方法可以做到</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;"><span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"><span style="font-size: small;"> </span></span></span>常规方法,首先查询出所有满足条件的记录,然后随机的挑选出部分记录.这种方法在满足条件的记录数很多时效果不理想.</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt;"><span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"><span style="font-size: small;"> </span></span></span>使用limit语法,先获取满足条件的记录条数, 然后在<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>查询语句中加入limit来限制只查询满足要求的一段记录. 这种方法虽然要查询两次,但是在数据量大时反而比较高效.</div>
<div>示例代码如下:</div>
<div>//1.常规的方法</div>
<div>//性能瓶颈,10万条记录时,执行查询140ms, 获取结果集500ms,其余可忽略</div>
<div>int CDBManager::QueryHostCache(MYSQL* connecthandle, char * channelid, int ISPtype, CDBManager::CHostCacheTable * &amp;hostcache)</div>
<div>{<span><br />
 char selectSQL[SQL_LENGTH];<br />
 memset(selectSQL, 0, sizeof(selectSQL));<br />
 sprintf(selectSQL,&#8221;select * from HostCache where ChannelID = &#8216;%s&#8217; and ISPtype = %d&#8221;, channelid, ISPtype);<br />
 if(mysql_real_query(connecthandle, selectSQL, strlen(selectSQL)) != 0)   //</span>检索</div>
<p> return 0;<br />
 //</span>获取结果集</div>
<p> m_pResultSet = mysql_store_result(connecthandle);<br />
 if(!m_pResultSet)   //</span>获取结果集出错</div>
<p> return 0;<br />
 int iAllNumRows = (int)(mysql_num_rows(m_pResultSet));      ///&lt;</span>所有的搜索结果数</div>
<p> //</span>计算待返回的结果数</div>
<p> int iReturnNumRows = (iAllNumRows &lt;= RETURN_QUERY_HOST_NUM)? iAllNumRows:RETURN_QUERY_HOST_NUM;<br />
 if(iReturnNumRows &lt;= RETURN_QUERY_HOST_NUM)<br />
 {<br />
 //</span>获取逐条记录</div>
<p> for(int i = 0; i&lt;iReturnNumRows; i++)<br />
 {<br />
 //</span>获取逐个字段</div>
<p> m_Row = mysql_fetch_row(m_pResultSet);<br />
 if(m_Row[0] != NULL)<br />
 strcpy(hostcache[i].sessionid, m_Row[0]);<br />
 if(m_Row[1] != NULL)<br />
 strcpy(hostcache[i].channelid, m_Row[1]);<br />
 if(m_Row[2] != NULL)<br />
 hostcache[i].ISPtype      = atoi(m_Row[2]);<br />
 if(m_Row[3] != NULL)<br />
 hostcache[i].externalIP   = atoi(m_Row[3]);<br />
 if(m_Row[4] != NULL)<br />
 hostcache[i].externalPort = atoi(m_Row[4]);<br />
 if(m_Row[5] != NULL)<br />
 hostcache[i].internalIP   = atoi(m_Row[5]);<br />
 if(m_Row[6] != NULL)<br />
 hostcache[i].internalPort = atoi(m_Row[6]);<br />
 }<br />
 }<br />
 else<br />
 {<br />
 //</span>随机的挑选指定条记录返回</div>
<p> int iRemainder = iAllNumRows%iReturnNumRows;    ///&lt;</span>余数</div>
<p> int iQuotient = iAllNumRows/iReturnNumRows;      ///&lt;</span>商</div>
<p> int iStartIndex = rand()%(iRemainder + 1);         ///&lt;</span>开始下标<span><br />
 //</span>获取逐条记录</div>
<p> for(int iSelectedIndex = 0; iSelectedIndex &lt; iReturnNumRows; iSelectedIndex++)<br />
 {<br />
 mysql_data_seek(m_pResultSet, iStartIndex + iQuotient * iSelectedIndex);<br />
 m_Row = mysql_fetch_row(m_pResultSet);<br />
 if(m_Row[0] != NULL)<br />
 strcpy(hostcache[iSelectedIndex].sessionid, m_Row[0]);<br />
 if(m_Row[1] != NULL)<br />
 strcpy(hostcache[iSelectedIndex].channelid, m_Row[1]);<br />
 if(m_Row[2] != NULL)<br />
 hostcache[iSelectedIndex].ISPtype      = atoi(m_Row[2]);<br />
 if(m_Row[3] != NULL)<br />
 hostcache[iSelectedIndex].externalIP   = atoi(m_Row[3]);<br />
 if(m_Row[4] != NULL)<br />
 hostcache[iSelectedIndex].externalPort = atoi(m_Row[4]);<br />
 if(m_Row[5] != NULL)<br />
 hostcache[iSelectedIndex].internalIP   = atoi(m_Row[5]);<br />
 if(m_Row[6] != NULL)<br />
 hostcache[iSelectedIndex].internalPort = atoi(m_Row[6]);<br />
 }<br />
 }<br />
 //</span>释放结果集内容</div>
<p> mysql_free_result(m_pResultSet);<br />
 return iReturnNumRows;</p>
<div>}</div>
<div>//2.使用limit版</div>
<div>int CDBManager::QueryHostCache(MYSQL * connecthandle, char * channelid, unsigned int myexternalip, int ISPtype, CHostCacheTable * hostcache)</div>
<div>{</div>
<p> //</span>首先获取满足结果的记录条数,再使用limit随机选择指定条记录返回</div>
<p> MYSQL_ROW row;<br />
 MYSQL_RES * pResultSet;<br />
 char selectSQL[SQL_LENGTH];<br />
 memset(selectSQL, 0, sizeof(selectSQL));<br />
 sprintf(selectSQL,&#8221;select count(*) from HostCache where ChannelID = &#8216;%s&#8217; and ISPtype = %d&#8221;, channelid, ISPtype);<br />
 if(mysql_real_query(connecthandle, selectSQL, strlen(selectSQL)) != 0)   //</span>检索</div>
<p> return 0;<br />
 pResultSet = mysql_store_result(connecthandle);<br />
 if(!pResultSet)<br />
 return 0;<br />
 row = mysql_fetch_row(pResultSet);<br />
 int iAllNumRows = atoi(row[0]);<br />
 mysql_free_result(pResultSet);<br />
 //</span>计算待取记录的上下范围</div>
<p> int iLimitLower = (iAllNumRows &lt;= RETURN_QUERY_HOST_NUM)?<br />
 0:(rand()%(iAllNumRows &#8211; RETURN_QUERY_HOST_NUM));<br />
 int iLimitUpper = (iAllNumRows &lt;= RETURN_QUERY_HOST_NUM)?<br />
 iAllNumRows:(iLimitLower + RETURN_QUERY_HOST_NUM);<br />
 //</span>计算待返回的结果数</div>
<p> int iReturnNumRows = (iAllNumRows &lt;= RETURN_QUERY_HOST_NUM)?<br />
 iAllNumRows:RETURN_QUERY_HOST_NUM;</p>
<p> //</span>使用limit作查询</div>
<p> sprintf(selectSQL,&#8221;select SessionID, ExternalIP, ExternalPort, InternalIP, InternalPort &#8221;<br />
 &#8220;from HostCache where ChannelID = &#8216;%s&#8217; and ISPtype = %d limit %d, %d&#8221;<br />
 , channelid, ISPtype, iLimitLower, iLimitUpper);<br />
 if(mysql_real_query(connecthandle, selectSQL, strlen(selectSQL)) != 0)   //</span>检索</div>
<p> return 0;<br />
 pResultSet = mysql_store_result(connecthandle);<br />
 if(!pResultSet)<br />
 return 0;<br />
 //</span>获取逐条记录</div>
<p> for(int i = 0; i&lt;iReturnNumRows; i++)<br />
 {<br />
 //</span>获取逐个字段</div>
<p> row = mysql_fetch_row(pResultSet);<br />
 if(row[0] != NULL)<br />
 strcpy(hostcache[i].sessionid, row[0]);<br />
 if(row[1] != NULL)<br />
 hostcache[i].externalIP   = atoi(row[1]);<br />
 if(row[2] != NULL)<br />
 hostcache[i].externalPort = atoi(row[2]);<br />
 if(row[3] != NULL)<br />
 hostcache[i].internalIP   = atoi(row[3]);<br />
 if(row[4] != NULL)<br />
 hostcache[i].internalPort = atoi(row[4]);<br />
 }<br />
 //</span>释放结果集内容</div>
<p> mysql_free_result(pResultSet);<br />
 return iReturnNumRows;</p>
<div>}</div>
<div><span>l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span>使用连接池管理连接.</div>
<div style="margin: 0cm 0cm 0pt 21pt;">在有大量节点访问的数据库设计中,经常要使用到连接池来管理所有的连接.</div>
<div>一般方法是:建立两个连接句柄队列,空闲的等待使用的队列和正在使用的队列.</div>
<div>当要查询时先从空闲队列中获取一个句柄,插入到正在使用的队列,再用这个句柄做数据库操作,完毕后一定要从使用队列中删除,再插入到空闲队列.</div>
<div style="text-indent: 21pt;">设计代码如下:</div>
<div>//定义句柄队列</div>
<div>typedef std::list&lt;MYSQL *&gt; CONNECTION_HANDLE_LIST;</div>
<div>typedef std::list&lt;MYSQL *&gt;::iterator CONNECTION_HANDLE_LIST_IT;</div>
<div>//连接数据库的参数结构</div>
<div>class CDBParameter<span> </p>
<div>{</div>
<div>public:</div>
<p> char *host;                                 ///&lt;</span>主机名</div>
<p> char *user;                                 ///&lt;</span>用户名</div>
<p> char *password;                         ///&lt;</span>密码</div>
<p> char *database;                           ///&lt;</span>数据库名</div>
<p> unsigned int port;                 ///&lt;</span>端口，一般为0</div>
<p> const char *unix_socket;      ///&lt;</span>套接字，一般为NULL</div>
<p> unsigned int client_flag; ///&lt;</span>一般为0</div>
<div>};</div>
<div>//创建两个队列</div>
<div>CONNECTION_HANDLE_LIST m_lsBusyList;<span> ///&lt;</span>正在使用的连接句柄</div>
<div>CONNECTION_HANDLE_LIST m_lsIdleList;<span> ///&lt;</span>未使用的连接句柄</div>
<div>//所有的连接句柄先连上数据库,加入到空闲队列中,等待使用.</div>
<div>bool CDBManager::Connect(char * host /* = &#8220;localhost&#8221; */, char * user /* = &#8220;chenmin&#8221; */, \</div>
<p> char * password /* = &#8220;chenmin&#8221; */, char * database /* = &#8220;HostCache&#8221; */)</p>
<div>{</div>
<p> CDBParameter * lpDBParam = new CDBParameter();<br />
 lpDBParam-&gt;host = host;<br />
 lpDBParam-&gt;user = user;<br />
 lpDBParam-&gt;password = password;<br />
 lpDBParam-&gt;database = database;<br />
 lpDBParam-&gt;port = 0;<br />
 lpDBParam-&gt;unix_socket = NULL;<br />
 lpDBParam-&gt;client_flag = 0;<br />
 try<br />
 {<br />
 //</span>连接</div>
<p> for(int index = 0; index &lt; CONNECTION_NUM; index++)<br />
 {<br />
 MYSQL * pConnectHandle = mysql_init((MYSQL*) 0);     //</span>初始化连接句柄</div>
<p> if(!mysql_real_connect(pConnectHandle, lpDBParam-&gt;host, lpDBParam-&gt;user, lpDBParam-&gt;password,\<br />
 lpDBParam-&gt;database,lpDBParam-&gt;port,lpDBParam-&gt;unix_socket,lpDBParam-&gt;client_fla))<br />
 return false;</p>
<div style="margin: 0cm 0cm 0pt 42pt; text-indent: 21pt;">//加入到空闲队列中</div>
<p> m_lsIdleList.push_back(pConnectHandle);<br />
 }<br />
 }<br />
 catch(&#8230;)<br />
 {<br />
 return false;<br />
 }<br />
 return true;</p>
<div>}</div>
<div>//提取一个空闲句柄供使用</div>
<div>MYSQL * CDBManager::GetIdleConnectHandle()</div>
<div>{</div>
<p> MYSQL * pConnectHandle = NULL;<br />
 m_ListMutex.acquire();<br />
 if(m_lsIdleList.size())<br />
 {<br />
 pConnectHandle = m_lsIdleList.front();<br />
 m_lsIdleList.pop_front();<br />
 m_lsBusyList.push_back(pConnectHandle);<br />
 }<br />
 else //</span>特殊情况,闲队列中为空,返回为空</div>
<p> {<br />
 pConnectHandle = 0;<br />
 }<br />
 m_ListMutex.release();<br />
 return pConnectHandle;</p>
<div>}</div>
<div>//从使用队列中释放一个使用完毕的句柄,插入到空闲队列</div>
<div>void CDBManager::SetIdleConnectHandle(MYSQL * connecthandle)</div>
<div>{</div>
<p> m_ListMutex.acquire();<br />
 m_lsBusyList.remove(connecthandle);<br />
 m_lsIdleList.push_back(connecthandle);<br />
 m_ListMutex.release();</p>
<div>}</div>
<div>//使用示例,首先获取空闲句柄,利用这个句柄做真正的操作,然后再插回到空闲队列</div>
<div>bool CDBManager::DeleteHostCacheBySessionID(char * sessionid)</div>
<div>{</div>
<p> MYSQL * pConnectHandle = GetIdleConnectHandle();<br />
 if(!pConnectHandle)<br />
 return 0;<br />
 bool bRet = DeleteHostCacheBySessionID(pConnectHandle, sessionid);<br />
 SetIdleConnectHandle(pConnectHandle);<br />
 return bRet;</p>
<div>}</div>
<div>//传入空闲的句柄,做真正的删除操作</div>
<div>bool CDBManager::DeleteHostCacheBySessionID(MYSQL * connecthandle, char * sessionid)</div>
<div>{</div>
<p> char deleteSQL[SQL_LENGTH];<br />
 memset(deleteSQL, 0, sizeof(deleteSQL));<br />
 sprintf(deleteSQL,&#8221;delete from HostCache where SessionID = &#8216;%s&#8217;&#8221;, sessionid);<br />
 if(mysql_query(connecthandle,deleteSQL) != 0) //</span>删除</div>
<p> return false;<br />
 return true;</p>
<div>}</div>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/04/22/778/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/04/22/778/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/04/22/778/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/04/22/778/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/04/22/778/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</a>, <a href="http://www.iwanna.cn/topics/develope/sql/mysql-sql-develope/" title="Mysql" rel="tag nofollow">Mysql</a>, <a href="http://www.iwanna.cn/tags/skill/" title="Skill" rel="tag nofollow">Skill</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/04/29/894/" title="页面输出时一些常用的小技巧 (2009年04月29日)">页面输出时一些常用的小技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/30/915/" title="解密CSS Sprites：技巧、工具和教程 (2009年04月30日)">解密CSS Sprites：技巧、工具和教程</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/04/29/2874/" title="相见恨晚的一些 JavaScript 技巧 (2010年04月29日)">相见恨晚的一些 JavaScript 技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/23/4676/" title="如何高效在多个浏览器之间同步使用的5个工具技巧 (2010年07月23日)">如何高效在多个浏览器之间同步使用的5个工具技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/06/4378/" title="如何释放已删除的InnoDB磁盘空间 (2010年07月6日)">如何释放已删除的InnoDB磁盘空间</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/08/16/2155/" title="如何使Google爬虫索引更快的技巧 (2009年08月16日)">如何使Google爬虫索引更快的技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/24/1869/" title="创建产品跟设计启动对接5个技巧 (2009年06月24日)">创建产品跟设计启动对接5个技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/08/2497/" title="你可能不知道的MySQL (2010年02月8日)">你可能不知道的MySQL</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/24/1874/" title="从初级进阶到中级程序员的12个秘诀 (2009年06月24日)">从初级进阶到中级程序员的12个秘诀</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/04/22/778/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
