<?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; Sql</title>
	<atom:link href="http://www.iwanna.cn/topics/develope/sql/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 停止<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a></p>
<p>3 删除所有InnoDB数据库文件和日志</p>
<p>4 启动<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>并自动重建InnoDB数据库文件和日志文件</p>
<p>5 导入前面备份的数据库文件</p>
<p>有一点要注意，你配置了<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>数据库复制，当你导入数据库备份文件的时候，所有的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>在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>-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、<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>、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.NET程序中使用参数化查询</h4>
<p>ASP.NET环境下的查询化查询也是通过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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>的参数格式与<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>板凳注：在日常开发过程中，其实我更偏爱使用 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>-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>和<a href="http://www.iwanna.cn/tags/oracle/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Oracle">Oracle</a> <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  Developer。这里有十款优秀的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>图形化界面。</p>
<h3>1. Workbench</h3>
<p>制造商：Sun Systems/<a href="http://www.iwanna.cn/tags/oracle/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Oracle">Oracle</a><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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>  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.net旗下DBDesigner 4的继承者，并替代了<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> GUI Tools  Bundle。当前版本是5.2，最早版本是5.0，这是为了强调<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>  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>用于<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>的Navicat既是一个数据库管理器同时还是一个开发工具。它适用于从3.21以上的任何<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>数据库服务器，并且支持包括触 发器，存储过程，函数，事件，预览和用户管理在内的绝大多数最新的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>功能。</p>
<p>Navicat的功能非常复杂，足以满足专业开发人员的各种特殊需求，同时对于<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>新手来说也非常简单易学。</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用于管理<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>数据库（本地或在Internet上）。您可以使用它来添加删除数据库和表，修改字段和索引，预览和过滤表的内容，添加编辑删除 行，执行自定义查询，转储表或整个数据库。</p>
<p>它兼容<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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>之前被称为<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>-Front的HeidiSQL是一款免费的开源客户端，由德国程序员Ansgar  Becker开发，同时还得到了一些Delphi贡献者的帮助。用户必须通过许可证书创建一个会话登陆本地或远程<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>服务器，才可以使用 HeidiSQL管理数据库。通过这个会话，用户可以管理所链接的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>服务器的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>数据库，并在完成之后断开。它的功能集足够应付绝大多数常 见和高级数据库，表，数据记录选项，但是目前还处于积极的开发中，以求能实现<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>前端的所有功能。</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，<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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编写，用于在线处理<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>管理。PhpMyAdmin支持多种<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</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>Tobias Ratschiller曾经是IT顾问，后来创建了Maguma软件公司。由于受到Peter  Kuppelwieser开发的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>-Webadmin的影响，于1998年开始了基于PHP的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>的web前端开发。因时间不足，他与 2000年放弃了该项目（以及同样有他开发的phpAdsNew）。就在那时，phpMyAdmin已成为最受欢迎的PHP程序和<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>管理工具之 一，它拥有广泛的社区用户和贡献者。为了协调越来越多的补丁，Olivier Müller，Marc Delisle以及Loïc  Chapeaux三位开发人员在注册 SourceForge.net注册了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 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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兼容数据库到<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>数据库。</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 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a><br />
专业的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> GUI管理工具，支持所有最新的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 5.0和5.1。功能包括预览，过程，触发器和表分区。</p>
<p>Data Wizard for <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a><br />
<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>的转储，以及数据导出/导入工具等。</p>
<p>Code Factory for <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a><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 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a><br />
用于<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>服务器维护。</p>
<p>PHP Generator for <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a><br />
生成高性能<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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是一款<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>  GUI客户端工具，被设计用来自动化和简化数据库的开发进程。它同时还提供了更简便的方法来开拓和维护现有数据库，以及不同方式来设计复杂<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/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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>用于<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>的DbForge Studio提供了图形化的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>开发和管理。</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 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a></p>
<p>Data Compare for <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a></p>
<p>Query Builder for <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a></p>
<p>Fusion for <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a></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>同时支持<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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包含了用于<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>服务器管理的完整工具集。它可用于创建/编辑/放弃数据库对象，数据库同步，以及数据导出/导入。数据库管理员还可以用 它来执行数据库转移，以及备份和还原。它支持使用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>，一款流行的<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>数据库的Web管理界面。而出乎人意料的是，他们的团队只有仅仅<strong><a href="http://www.iwanna.cn/archives/2010/05/15/3160/" title="4个人支持整个项目——phpMyAdmin开发人员访谈">4个人来支持整个phpMyAdmin</a></strong>。<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>是全球最流行的Web程序数据库，而phpMyAdmin让<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>更易于管理。phpMyAdmin允许数据库设计师连接<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>，查看他们具有权限的所有数据库和数据表，并在 上面执行操作，如创建和调整表结构、插入和更新数据、导入和导出，以及在多个服务器上同步数据。</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.net。“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>14个数据库设计中技巧</title>
		<link>http://www.iwanna.cn/archives/2010/04/15/2735/</link>
		<comments>http://www.iwanna.cn/archives/2010/04/15/2735/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 15:35:44 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Skill]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2735</guid>
		<description><![CDATA[1. 原始单据与实体之间的关系
可以是一对一、一对多、多对多的关系。在一般情况下，它们是一对一的关系：即一张原始单据对应且 只对应一个实体。在特殊情况下，它们可能是一对多或多对一的关系，即一张原始单据对应多个实体，或多张原始单据对应一个实体。这里的实体可以理解为基本 表。明确这种对应关系后，对我们设计录入界面大有好处。
〖例1〗：一份员工履历资料，在人力资源信息系统中，就对应三个基本表： 员工基本情况表、社会关系表、工作简历表。这就是“一张原始单据对应多个实体”的典型例子。
2. 主键与外键
一般而言，一个实体不能既无主键又无外键。在E－R 图中, 处于叶子部位的实体, 可以定义主键，也可以不定义主键(因为它无子孙),  但必须要有外键(因为它有父亲)。
主键与外键的设计，在全局数据库的设计中，占有重要地位。当全局数据库的设计完成以后，有个美 国数据库设计专家说：“键，到处都是键，除了键之外，什么也没有”，这就是他的数据库设计经验之谈，也反映了他对信息系统核心(数据模型)的高度抽象思 想。因为：主键是实体的高度抽象，主键与外键的配对，表示实体之间的连接。

3. 基本表的性质
基本表与中间 表、临时表不同，因为它具有如下四个特性：
(1) 原子性。基本表中的字段是不可再分解的。
(2)  原始性。基本表中的记录是原始数据（基础数据）的记录。
(3)  演绎性。由基本表与代码表中的数据，可以派生出所有的输出数据。
(4)  稳定性。基本表的结构是相对稳定的，表中的记录是要长期保存的。
理解基本表的性质后，在设计数据库时，就能将基本表与中间表、临 时表区分开来。
4. 范式标准
基本表及其字段之间的关系,  应尽量满足第三范式。但是，满足第三范式的数据库设计，往往不是最好的设计。为了提高数据库的运行效率，常常需要降低范式标准：适当增加冗余，达到以空间 换时间的目的。
〖例2〗：有一张存放商品的基本表，如表1所示。“金额”这个字段的存在，表明该表的设计不满足第三范式，因为 “金额”可以由“单价”乘以“数量”得到，说明“金额”是冗余字段。但是，增加“金额”这个冗余字段，可以提高查询统计的速度，这就是以空间换时间的作 法。
在Rose  2002中，规定列有两种类型：数据列和计算列。“金额”这样的列被称为“计算列”，而“单价”和“数量”这样的列被称为“数据列”。
表1 商品表的表结构
商品名称 商品型号 单价 数量 金额
电视机 29吋 2,500 40  100,000
5. 通俗地理解三个范式
通俗地理解三个范式，对于数据库设计大有好处。在数据库设计中，为 了更好地应用三个范式，就必须通俗地理解三个范式(通俗地理解是够用的理解，并不是最科学最准确的理解)：
第一范式：1NF是对 属性的原子性约束，要求属性具有原子性，不可再分解；
第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一 性；
第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余。
没有冗余的数据库设计可以做到。但是，没有冗余的数据库未必是最好的数据库，有时为了提高运行效率，就必须降低范式标准，适当保留冗余数据。具体做法是： 在概念数据模型设计时遵守第三范式，降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段，允许冗余。
6.  要善于识别与正确处理多对多的关系
若两个实体之间存在多对多的关系，则应消除这种关系。消除的办法是，在两者之间增加第三个实 体。这样，原来一个多对多的关系，现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体，实质上是一个较复杂的 关系，它对应一张基本表。一般来讲，数据库设计工具不能识别多对多的关系，但能处理多对多的关系。
〖例3〗：在“图书馆信息系 统”中，“图书”是一个实体，“读者”也是一个实体。这两个实体之间的关系，是一个典型的多对多关系：一本图书在不同时间可以被多个读者借阅，一个读者又 可以借多本图书。为此，要在二者之间增加第三个实体，该实体取名为“借还书”，它的属性为：借还时间、借还标志(0表示借书，1表示还书)，另外，它还应 该有两个外键(“图书”的主键，“读者”的主键)，使它能与“图书”和“读者”连接。
7. 主键PK的取值方法
PK是供程序员使用的表间连接工具，可以是一无物理意义的数字串,  [...]]]></description>
			<content:encoded><![CDATA[<p>1. 原始单据与实体之间的关系</p>
<p>可以是一对一、一对多、多对多的关系。在一般情况下，它们是一对一的关系：即一张原始单据对应且 只对应一个实体。在特殊情况下，它们可能是一对多或多对一的关系，即一张原始单据对应多个实体，或多张原始单据对应一个实体。这里的实体可以理解为基本 表。明确这种对应关系后，对我们设计录入界面大有好处。</p>
<p>〖例1〗：一份员工履历资料，在人力资源信息系统中，就对应三个基本表： 员工基本情况表、社会关系表、工作简历表。这就是“一张原始单据对应多个实体”的典型例子。</p>
<p>2. 主键与外键</p>
<p>一般而言，一个实体不能既无主键又无外键。在E－R 图中, 处于叶子部位的实体, 可以定义主键，也可以不定义主键(因为它无子孙),  但必须要有外键(因为它有父亲)。</p>
<p>主键与外键的设计，在全局数据库的设计中，占有重要地位。当全局数据库的设计完成以后，有个美 国数据库设计专家说：“键，到处都是键，除了键之外，什么也没有”，这就是他的数据库设计经验之谈，也反映了他对信息系统核心(数据模型)的高度抽象思 想。因为：主键是实体的高度抽象，主键与外键的配对，表示实体之间的连接。<br />
<span id="more-2735"></span><br />
3. 基本表的性质</p>
<p>基本表与中间 表、临时表不同，因为它具有如下四个特性：</p>
<p>(1) 原子性。基本表中的字段是不可再分解的。</p>
<p>(2)  原始性。基本表中的记录是原始数据（基础数据）的记录。</p>
<p>(3)  演绎性。由基本表与代码表中的数据，可以派生出所有的输出数据。</p>
<p>(4)  稳定性。基本表的结构是相对稳定的，表中的记录是要长期保存的。</p>
<p>理解基本表的性质后，在设计数据库时，就能将基本表与中间表、临 时表区分开来。</p>
<p>4. 范式标准</p>
<p>基本表及其字段之间的关系,  应尽量满足第三范式。但是，满足第三范式的数据库设计，往往不是最好的设计。为了提高数据库的运行效率，常常需要降低范式标准：适当增加冗余，达到以空间 换时间的目的。</p>
<p>〖例2〗：有一张存放商品的基本表，如表1所示。“金额”这个字段的存在，表明该表的设计不满足第三范式，因为 “金额”可以由“单价”乘以“数量”得到，说明“金额”是冗余字段。但是，增加“金额”这个冗余字段，可以提高查询统计的速度，这就是以空间换时间的作 法。</p>
<p>在Rose  2002中，规定列有两种类型：数据列和计算列。“金额”这样的列被称为“计算列”，而“单价”和“数量”这样的列被称为“数据列”。</p>
<p>表1 商品表的表结构</p>
<p>商品名称 商品型号 单价 数量 金额</p>
<p>电视机 29吋 2,500 40  100,000</p>
<p>5. 通俗地理解三个范式</p>
<p>通俗地理解三个范式，对于数据库设计大有好处。在数据库设计中，为 了更好地应用三个范式，就必须通俗地理解三个范式(通俗地理解是够用的理解，并不是最科学最准确的理解)：</p>
<p>第一范式：1NF是对 属性的原子性约束，要求属性具有原子性，不可再分解；</p>
<p>第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一 性；</p>
<p>第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余。</p>
<p>没有冗余的数据库设计可以做到。但是，没有冗余的数据库未必是最好的数据库，有时为了提高运行效率，就必须降低范式标准，适当保留冗余数据。具体做法是： 在概念数据模型设计时遵守第三范式，降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段，允许冗余。</p>
<p>6.  要善于识别与正确处理多对多的关系</p>
<p>若两个实体之间存在多对多的关系，则应消除这种关系。消除的办法是，在两者之间增加第三个实 体。这样，原来一个多对多的关系，现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体，实质上是一个较复杂的 关系，它对应一张基本表。一般来讲，数据库设计工具不能识别多对多的关系，但能处理多对多的关系。</p>
<p>〖例3〗：在“图书馆信息系 统”中，“图书”是一个实体，“读者”也是一个实体。这两个实体之间的关系，是一个典型的多对多关系：一本图书在不同时间可以被多个读者借阅，一个读者又 可以借多本图书。为此，要在二者之间增加第三个实体，该实体取名为“借还书”，它的属性为：借还时间、借还标志(0表示借书，1表示还书)，另外，它还应 该有两个外键(“图书”的主键，“读者”的主键)，使它能与“图书”和“读者”连接。</p>
<p>7. 主键PK的取值方法</p>
<p>PK是供程序员使用的表间连接工具，可以是一无物理意义的数字串,  由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时，建议字段的个数不要太多，多了不但索引占 用空间大，而且速度也慢。</p>
<p>8. 正确认识数据冗余</p>
<p>主键与外键在多表中的重复出现,  不属于数据冗余，这个概念必须清楚，事实上有许多人还不清楚。非键字段的重复出现,  才是数据冗余！而且是一种低级冗余，即重复性的冗余。高级冗余不是字段的重复出现，而是字段的派生出现。</p>
<p>〖例4〗：商品中的“单 价、数量、金额”三个字段，“金额”就是由“单价”乘以“数量”派生出来的，它就是冗余，而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗 余才会增加数据的不一致性，因为同一数据，可能从不同时间、地点、角色上多次录入。因此，我们提倡高级冗余(派生性冗余)，反对低级冗余(重复性冗 余)。</p>
<p>9. E－R图没有标准答案</p>
<p>信息系统的E－R图没有标准答案，因为它的设计与画法不是惟一的，只要它 覆盖了系统需求的业务范围和功能内容，就是可行的。反之要修改E－R图。尽管它没有惟一的标准答案，并不意味着可以随意设计。好的E－图的标准是：结构清 晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。</p>
<p>10. 视图技术在数据库设计中很有用</p>
<p>与基本 表、代码表、中间表不同，视图是一种虚表，它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口，是基表数据综合的一种形式,  是数据处理的一种方法，是用户数据保密的一种手段。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。  若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。</p>
<p>对于某 些与国家政治、经济、技术、军事和安全利益有关的信息系统，视图的作用更加重要。这些系统的基本表完成物理设计之后，立即在基本表上建立第一层视图，这层 视图的个数和结构，与基本表的个数和结构是完全相同。并且规定，所有的程序员，一律只准在视图上操作。只有数据库管理员，带着多个人员共同掌握的“安全钥 匙”，才能直接在基本表上操作。请读者想想：这是为什么？</p>
<p>11. 中间表、报表和临时表</p>
<p>中间表是存放统计数 据的表，它是为数据仓库、输出报表或查询结果而设计的，有时它没有主键与外键(数据仓库除外)。临时表是程序员个人设计的，存放临时记录，为个人所用。基 表和中间表由DBA维护，临时表由程序员自己用程序自动维护。</p>
<p>12. 完整性约束表现在三个方面</p>
<p>域的完整 性：用Check来实现约束，在数据库设计工具中，对字段的取值范围进行定义时，有一个Check按钮，通过它定义字段的值城。</p>
<p>参照完整性：用PK、FK、表级触发器来实现。</p>
<p>用户定义完整性：它是一些业务规则，用存储过程和触发器来实现。</p>
<p>13.  防止数据库设计打补丁的方法是“三少原则”</p>
<p>(1)  一个数据库中表的个数越少越好。只有表的个数少了，才能说明系统的E－R图少而精，去掉了重复的多余的实体，形成了对客观世界的高度抽象，进行了系统的数 据集成，防止了打补丁式的设计；</p>
<p>(2)  一个表中组合主键的字段个数越少越好。因为主键的作用，一是建主键索引，二是做为子表的外键，所以组合主键的字段个数少了，不仅节省了运行时间，而且节省 了索引存储空间；</p>
<p>(3)  一个表中的字段个数越少越好。只有字段的个数少了，才能说明在系统中不存在数据重复，且很少有数据冗余，更重要的是督促读者学会“列变行”，这样就防止了 将子表中的字段拉入到主表中去，在主表中留下许多空余的字段。所谓“列变行”，就是将主表中的一部分内容拉出去，另外单独建一个子表。这个方法很简单，有 的人就是不习惯、不采纳、不执行。</p>
<p>数据库设计的实用原则是：在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概 念，综合观点，不能孤立某一个原则。该原则是相对的，不是绝对的。“三多”原则肯定是错误的。试想：若覆盖系统同样的功能，一百个实体(共一千个属性)  的E－R图，肯定比二百个实体(共二千个属性)的E－R图，要好得多。</p>
<p>提倡“三少”原则，是叫读者学会利用数据库设计技术进行系 统的数据集成。数据集成的步骤是将文件系统集成为应用数据库，将应用数据库集成为主题数据库，将主题数据库集成为全局综合数据库。集成的程度越高，数据共 享性就越强，信息孤岛现象就越少，整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。</p>
<p>提倡“三少” 原则的目的，是防止读者利用打补丁技术，不断地对数据库进行增删改，使企业数据库变成了随意设计数据库表的“垃圾堆”，或数据库表的“大杂院”，最后造成 数据库中的基本表、代码表、中间表、临时表杂乱无章，不计其数，导致企事业单位的信息系统无法维护而瘫痪。</p>
<p>“三多”原则任何人都 可以做到，该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的原则，它要求有较高的数据库设计技巧与艺术，不是任何人都能做到的，因为 该原则是杜绝用“打补丁方法”设计数据库的理论依据。</p>
<p>14. 提高数据库运行效率的办法</p>
<p>在给定的系统硬件和 系统软件条件下，提高数据库系统的运行效率的办法是：</p>
<p>(1) 在数据库物理设计时，降低范式，增加冗余, 少用触发器,  多用存储过程。</p>
<p>(2)  当计算非常复杂、而且记录条数非常巨大时(例如一千万条)，复杂计算要先在数据库外面，以文件系统方式用C++语言计算处理完成之后，最后才入库追加到表 中去。这是电信计费系统设计的经验。</p>
<p>(3)  发现某个表的记录太多，例如超过一千万条，则要对该表进行水平分割。水平分割的做法是，以该表主键PK的某个值为界线，将该表的记录水平分割为两个表。若 发现某个表的字段太多，例如超过八十个，则垂直分割该表，将原来的一个表分解为两个表。</p>
<p>(4)  对数据库管理系统DBMS进行系统优化，即优化各种系统参数，如缓冲区个数。</p>
<p>(5)  在使用面向数据的<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 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/04/15/2735/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/04/15/2735/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/04/15/2735/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/04/15/2735/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/04/15/2735/">抓虾</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/skill/" title="Skill" rel="tag nofollow">Skill</a>, <a href="http://www.iwanna.cn/topics/develope/sql/" title="Sql" rel="tag nofollow">Sql</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/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/23/4676/" title="如何高效在多个浏览器之间同步使用的5个工具技巧 (2010年07月23日)">如何高效在多个浏览器之间同步使用的5个工具技巧</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/2009/08/16/2155/" title="如何使Google爬虫索引更快的技巧 (2009年08月16日)">如何使Google爬虫索引更快的技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/21/4658/" title="因为垄断形成，数据库市场将出现更多开源数据库 (2010年07月21日)">因为垄断形成，数据库市场将出现更多开源数据库</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/04/15/2735/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于数据大容量的导入导出小结[SQL Server]</title>
		<link>http://www.iwanna.cn/archives/2010/03/29/2607/</link>
		<comments>http://www.iwanna.cn/archives/2010/03/29/2607/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 14:18:44 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Sql]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2607</guid>
		<description><![CDATA[
/*----------------------------------------------------------------
-- Author  :feixianxxx(poofly)
-- Date    :2010-03-29 14:04:14
-- Version:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
        Jul  9 2008 14:43:34
        Copyright (c) 1988-2008 Microsoft Corporation
       [...]]]></description>
			<content:encoded><![CDATA[<pre>
<div>/*----------------------------------------------------------------
-- Author  :feixianxxx(poofly)
-- Date    :2010-03-29 14:04:14
-- Version:
--      Microsoft <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
        Jul  9 2008 14:43:34
        Copyright (c) 1988-2008 Microsoft Corporation
        Enterprise Evaluation Edition on Windows NT 6.1 &lt;X86&gt; (Build 7600: )
-- CONTENT：关于数据大容量的导入导出小结

----------------------------------------------------------------*/</div>
</pre>
<p>1。关于大容量数据导入导出的一些方法<br />
<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> SERVER提供多种工具用于各种数据源的数据导入导出，这些数据源包括本文文件、ODBC数据源、OLE  DB数据源、ASCII文本文件和EXCEL电子表格。</p>
<p>2.常用工具<br />
DTS:数据转换服务导入导出向导或者DTS设计器创建DTS包<br />
使用<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> SERVER复制发布数据<br />
BCP命令提示实用工具实现<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> SERVER实例和数据文件之间的数据导入导出<br />
BULK INSERT实现从数据文件导入数据到<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  SERVER实例<br />
分布式查询实现从一个数据源选择数据插入到<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> SERVER实例<br />
SELECT INTO 语句插入数据表</p>
<p>3.导入导出的数据<br />
1。导入数据的目标表必须存在。导出数据的目标文件如果存在，则将重写上面的内容。如果不存在，则BCP自动创建文件<br />
2。数据文件中的数据必须是字符格式或是先前由bcp工具生成的格式(本机格式)<br />
3。必须对相应的表拥有足够的权限</p>
<p>4.数据导入导出工具的简单用法a.DTS<br />
DTS是一组图形工具和可编程对象，是开发者可以将取自完全的不同源的数据析取、转换并合并成一个或者多个。<br />
它的特点就是可以融合完全不同源的数据源 这在企业改进中应用很大 。<br />
这里涉及到一个DTS包，它是一个有组织的链接、DTS任务、DTS转换和工作流约束的集合。<br />
关于DTS的操作请参看相关具体文献。</p>
<p>b.BCP<br />
它常用于将大量的数据从另外的程序转移到<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>  SERVER表中。当然也可以用于将表中数据传输到数据文件中。<br />
下面是一些BCP的简单用法(关于很多的选项使用看相关文档)</p>
<dl>
<dt><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> code</dt>
<dd>
<pre>
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->--前序,开启xp_cmdshell
--关于xp_cmdshell的一些知识 请看 http://blog.csdn.net/feixianxxx/archive/2009/08/14/4445603.aspx
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
--环境
create table test
(
    id int,
    value varchar(100)
)
go
insert test values(1,'s1')
insert test values(2,'s2')
insert test values(3,'s3')
insert test values(4,'s4')
go
--1将表的数据导出到TEXT.txt文件中
exec master..xp_cmdshell 'bcp tempdb.dbo.test out e:\test.txt -c  -Usa -P123456'
--如果是WINDOWS身份 直接 xec master..xp_cmdshell 'bcp tempdb.dbo.test out e:\test.txt -T -c'

--2将TEXT.txt文件中的数据复制到test1表
select * into test1 from test where 1=2
exec master..xp_cmdshell 'bcp tempdb.dbo.test1 in e:\test.txt -c  -Usa -P123456'
select * from test1

--3将TEST表的ID字段复制到TEXT.txt中
exec master..xp_cmdshell 'bcp "SELECT id FROM tempdb.dbo.test" queryout e:\test.dat -T -c'

--4将test表中的第一行移动到text.txt中
exec master..xp_cmdshell 'bcp "SELECT top 1 * from tempdb.dbo.test "  queryout e:\test.txt -c  -Usa -P123456'

--关闭xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;</div>
</pre>
</dd>
</dl>
<p>c.BULK INSERT<br />
它只能用于数据导入到<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> SERVER实例中，但是我们一般会选择使用它，因为它比BCP使用工具快。<br />
小例子：</p>
<dl>
<dt><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> code</dt>
<dd>
<pre>
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->--truncate table test
BULK INSERT tempdb..test
   FROM 'E:\test.txt'
   WITH
      (
         FIELDTERMINATOR =',',--字段分割符号
         ROWTERMINATOR ='\n'--换行符号
      )
select * from test
/*
id          value
----------- -----------
1            s1
2            asds
3            sadsa
100          2asda*/</div>
</pre>
</dd>
</dl>
<p>ps：只写最简单用法,具体参数很多，参考MSDN</p>
<p>d.分布式查询</p>
<dl>
<dt><a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> code</dt>
<dd>
<pre>
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->--包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。
--当访问链接服务器中的表时，这种方法是一种替代方法，并且是一种使用 OLE DB 连接并访问远程数据的一次性的临时方法。
--对于较频繁引用 OLE DB 数据源的情况，请改为使用链接服务器。

--A.将 OPENROWSET 与 SELECT 和 <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Server Native Client OLE DB 访问接口一起使用（MSDN）
以下示例使用 <a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a> Server Native Client OLE DB 访问接口访问 TEST.A 表，该表位于远程服务器 SERVER1 上的 POOFLY 数据库中.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SERVER1;Trusted_Connection=yes;',
     'SELECT GroupName, Name, DepartmentID
      FROM POOFLY.TEST.A
      ORDER BY GroupName, Name') AS a;

--B. 使用 Microsoft OLE DB Provider for Jet（MSDN）
以下示例通过 Microsoft OLE DB Provider for Jet 访问 Microsoft Access Northwind 数据库中的 Customers 表。
SELECT CustomerID, CompanyName
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
      'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
      'admin';'',Customers)
GO

--c.使用 OPENROWSET 将文件数据大容量插入 varchar(max) 列中
/*
为了导入大型对象数据，OPENROWSET BULK 子句支持三个选项，允许用户以单行或单列行集导入数据文件的内容。
你可以指定其中一个大型对象选项，而不是使用格式化文件。
大型对象选项包括：
SINGLE_BLOB
以单行读取 data_file 的内容，以 varbinary(max) 类型的单列行集返回内容。
SINGLE_CLOB
以字符读取指定数据文件的内容，以 varchar(max) 类型的单行、单列行集返回内容，使用的是当前数据库的排序规则，例如文本或 Microsoft Word 文档。
SINGLE_NCLOB
以 Unicode 读取指定数据文件的内容，以 nvarchar(max) 类型的单行、单列行集返回内容，并使用当前数据库的排序规则。
*/
以下示例创建一个用于演示的小型表，并将名为 Text1.txt 的文件中的文件数据插入 varchar(max) 列中。
CREATE TABLE my_Test(Document varchar(max))
GO
INSERT INTO  my_Test
 select * FROM OPENROWSET(BULK N'E:\test.txt', SINGLE_CLOB) AS Document
GO
select * from my_Test
/*
Document
-------------------------------------------------------
ASDSADASDSADSADSAFKJHFAS HKLASJHASHBKDSAHKJDHSAKJDHSAKDHSAKDHSA
*/</div>
</pre>
</dd>
</dl>
<p>e.SELECT INTO</p>
<p>关于这个的用法 相信大家都很清楚了 我就不说明了。</p>
<p>5。优 化导入导出数据的一些方法1。使用最小日志记录:<br />
a.恢复模式是简单模式或者大容量日志记录模式。如果你是完整模式，可以在进行操作前改成大容量日志模式，插入后改回来<br />
b.目的表没有触发器,没有索引,指定了TABLOCK</p>
<p>2。将数据从 多个客户端并行导入到单个表:<br />
a.如果是完整恢复模式，改成大容量日志模式<br />
b.指定了TABLOCK<br />
c.表上没有索引</p>
<p>3。使用批处理:通过设置BCP或者 BULK INSERT的相关选项，是用于可以指定在操作过程中发给<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>4。禁用触发器和约束:默认情况下是禁用的。如果要检查，可以在复制完成后进行一次更 新操作(当然值不可以变)</p>
<p>5。对数据文件中的数据排序:通 过设置ORDER提示,提高性能。默认数据文件是不排序的。</p>
<p>6。控制锁 定行为:指定大容量操作过程获得一个大容量更新表级锁，这样可以减少表上锁的争夺。</p>
<p>7。回避DEFAULT:通过设置相关选项,回避在复制数据到表中时，对有 DEFAULT的列插入默认值，而是改成在列中值为NULL。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/03/29/2607/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/03/29/2607/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/03/29/2607/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/03/29/2607/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/03/29/2607/">抓虾</a>
<hr />
</p>
	标签：<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><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<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/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/2010/05/12/3089/" title="19条 WordPress 实用的 SQL 查询语句 (2010年05月12日)">19条 WordPress 实用的 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/03/29/2607/feed/</wfw:commentRss>
		<slash:comments>0</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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&gt; select * from tbl_name limit 1;
+--------+--------+-------+
| uid    | sid    | times |
+--------+--------+-------+
| 104460 | 291250 |    29 |
+--------+--------+-------+
1 row in set (0.00 sec)

<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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)

<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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>语句的最大长度是有限制的。如果还不想这样，可以试试<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>的<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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&gt; create index uid on tbl_name(uid);</p></blockquote>
<p>测试如下查询：</p>
<blockquote>
<pre><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&gt; alter table tbl_name change uid uid varchar(12) not null;</p></blockquote>
<p>测试如下查询：</p>
<blockquote>
<pre><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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>七、<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>索引使用方式</strong></p>
<p><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>在一个查询中<strong>只能用到一个索引</strong>，所以要根据查询条件建立联合索引，联合索引只有第一位的字段在查询条 件中能才能使用到。</p>
<p>如果<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>认为不用索引比用索引更快的话，那么就不会用索引。</p>
<blockquote>
<pre><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&gt; create index times on tbl_name(times);
Query OK, 10000 rows affected (0.10 sec)
Records: 10000  Duplicates: 0  Warnings: 0

<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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)

<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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之类的请求同时到达 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>，直接导致无数的行锁表锁，甚至最后请求会堆积过多，从而触发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>此外，还有不少其他的选择可供尝试，比如说<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>第三方的<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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 可以很好的支持大数据量的存取，但是一般说来，数据库中的表越小，在它上面执行的查询也就会越快。因此，在创建表的时候，为了获得更好的性能，我们可以将 表中字段的宽度设得尽可能小。例如，在定义邮政编码这个字段时，如果将其设置为CHAR(255),显然给数据库增加了不必要的空间，甚至使用 VARCHAR这种类型也是多余的，因为CHAR(6)就可以很好的完成任务了。同样的，如果可以的话，我们应该使用MEDIUMINT而不是BIGIN 来定义整型字段。</p>
<p>另外一个提高效率的方法是在可能的情况下，应该尽量把字段设置为NOT NULL，这样在将来执行查询的时候，数据库不用去比较NULL值。<br />
<span id="more-2335"></span><br />
对于某些文本字段，例如“省份”或者“性别”，我们可以将它们定义为ENUM类型。因为在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>中，ENUM类型被当作数值型数据来处理，而数值型数据被处理起来的速度要比文本类型快得多。这样，我们又可以提高数据库的性能。<br />
2、使用连接（JOIN）来代替子查询(Sub-Queries)</p>
<p><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 从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）.. 之所以更有效率一些，是因为 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。<br />
3、使用联合(UNION)来代替手动创建的临时表</p>
<p><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 从 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 表中所有与该客户相关的记录也会被自动删除。如果要在 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 中使用外键，一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型。该类型不是 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 表的默认类型。定义的方法是在 CREATE TABLE 语句中加上 TYPE=INNODB。如例中所示。<br />
7、使用索引</p>
<p>索引是提高数据库性能的常用方法，它可以令数据库服务器以比没有索引快得多的速度检索特定的行，尤其是在查 询语句当中包含有MAX(), MIN()和ORDERBY这些命令的时候，性能提高更为明显。那该对哪些字段建立索引呢？一般说来，索引应建立在那些将用于JOIN, WHERE判断和ORDER BY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说，出现大量重复值是很有可能的情况，例如 customerinfo中的“province”.. 字段，在这样的字段上建立索引将不会有什么帮助；相反，还有可能降低数据库的性能。我们在创建表的时候可以同时创建合适的索引，也可以使用ALTER TABLE或CREATE INDEX在以后创建索引。此外，<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a></p>
<p>从版本3.23.23开始支持全文索引和搜索。全文索引在 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 中是一个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>语句使用不恰当的话，索引将无法发挥它应 有的作用。下面是应该注意的几个方面。首先，最好是在相同类型的字段间进行比较的操作。在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 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;<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>%&#8221;</p>
<p>但是如果换用下面的查询，返回的结果一样，但速度就要快上很多：</p>
<p>SELECT * FROM books<br />
WHERE name&gt;=&#8221;<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>&#8221;and name&lt;&#8221;MySQM&#8221;</p>
<p>最后，应该注意避免在查询中让<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>进行自动类型转换，因为转换过程也会使索引变得不起作用。</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 />
在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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 />
在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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 />
在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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 />
在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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 />
在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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 />
在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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> 如果一列的中数据的前缀重复值很少，我们最好就只索引这个前缀。<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>支持这种索引。我在上面用到的索<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.我在对查询效率有怀疑的时候,一般是直接用<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>的Explain来跟踪查询情况</strong>.<br />
你用<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">Mysql</a>-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>设计好<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySql</a>的索引可以让你的数据库飞起来，大大的提高数据库效率。设计<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySql</a>索引的时候有一下几点注意：<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上分别创建单个索引的话，由于<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>查询每次只能使用一个索引，所以虽然这样已经相对不做索引时全表扫描提高了很多效<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 />
<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>查询只使用一个索引，因此如果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>索引是高效找到行的一个方法，但是<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>也能使用索引找到一个列的数据，因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据；当能通 过读取索引就可以得到想要的数据，那就不需要读取行了。一个索引包含了（或覆盖了）满足查询结果的数据就叫做覆盖索引（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>索引的实体往往小于整个行的大小。如果<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>仅仅读取索引，意味着访问的数据就非常少了。这对于缓存的工作非常有用，这样相应的时间基本都是 来自复制数据而已。对于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索引不存储值，因此<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>只能使用B-TREE。并且不同的存储引擎实现覆盖索引都是不同的。并不是所有的存储引擎都支持它们。</div>
<div>当一个查询被索引所覆盖。（an index-covered query）。你使用EXPLAIN就会发现EXTRA列的值为“Using index”。一个例子，sakila.inventory表由一个多列的索引在store_id, film_id的列上。<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>能使用索引来访问这两列。如下</div>
<div>
<div><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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>覆盖索引的语句有些诡异的是会关闭优化。<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>语句优化器在执行语句之前会决定是否有一个索引覆盖它。假使这个索引覆盖了一个WHERE条件，但是并不是整个查询。如果这个条件评估为false，MySQL51以及以前版本都会取出行。</div>
<div>让我们来看看为什么会这样。以及怎样重写这个查询来解决上面所说的问题。</div>
<div>
<div><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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>没有索引覆盖这个查询，因为我们选择了这个表的所有列，并且没有一个索引覆盖这些列。理论上来说<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>还能使用一个捷径：WHERE条件中有一列被索引覆盖，因此<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>会使用索引先找到这个actor并且检查title是否匹配，之后再取整个行。</li>
<li><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>不能在索引中执行LIKE操作符。这个受限于底层的存储引擎API。在索引的操作，这只能支持简单的比较。<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>可以LIKE中匹 配前缀，因为把它们转为简单的比较了。但是这个例子中前缀的通配符使使用索引查询变为了不可能。最终。<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>服务器将会获取和匹配这个行的值，而不是 索引的值。</li>
</ul>
<div>我们可以使用加索引（artist, title, prod_id）和重写查询来解决上面的问题。重写的查询如下</div>
<div>
<div><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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>现在<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>在第一阶段的查询使用了覆盖索引，当它找到了在子查询匹配的行的时候。它不会在这个执行语句使用索引。但是总比没有强。</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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">mysql</a>&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>该速查手册只有一页纸，包含 CSS 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>将 CSS 的核心知识分成3部分，包含了 CSS 的方方面面。<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>一些不容易记住的 CSS 元素。<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 库 Prototype 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 库 Prototype 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.NET 速查参考手册。<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> <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a> 速查。下载（<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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>来保存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(<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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(<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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(<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a>* 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(<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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;<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> *&gt; CONNECTION_HANDLE_LIST;</div>
<div>typedef std::list&lt;<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> *&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 />
 <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * pConnectHandle = mysql_init((<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a>*) 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><a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * CDBManager::GetIdleConnectHandle()</div>
<div>{</div>
<p> <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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(<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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> <a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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(<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MYSQL</a> * 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>
		<item>
		<title>常用的数据库统计SQL语句(2)</title>
		<link>http://www.iwanna.cn/archives/2009/04/08/240/</link>
		<comments>http://www.iwanna.cn/archives/2009/04/08/240/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 04:03:39 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Sql]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=240</guid>
		<description><![CDATA[1.解决被零除(零做除数时)
&#8211;来自百度问吧
在统计系统中,需要求百分数,
如(sum(baseprice)-sum(quote))/sum(baseprice)*100)中,
如果sum(baseprice)为0,系统会报错,不能运行

把sum(baseprice) 改为
nullif(sum(isnull(baseprice,0)),0)
就可以了，除于0会出错，除于null就不会出错了

2.列出某年1-12月数据各产吕的销售数据
Select 产品ID AS 机型, SUM(CASE month(日期) WHEN 1 THEN 销售量 ELSE 0 END)
AS [一月], SUM(CASE month(日期) WHEN 2 THEN 销售量 ELSE 0 END) AS [二月],
SUM(CASE month(日期) WHEN 3 THEN 销售量 ELSE 0 END) AS [三月],
SUM(CASE month(日期) WHEN 4 THEN 销售量 ELSE 0 END) AS [四月],
SUM(CASE month(日期) WHEN 5 THEN 销售量 ELSE 0 END) AS [...]]]></description>
			<content:encoded><![CDATA[<p>1.解决被零除(零做除数时)</p>
<p>&#8211;来自百度问吧</p>
<p>在统计系统中,需要求百分数,<br />
如(sum(baseprice)-sum(quote))/sum(baseprice)*100)中,<br />
如果sum(baseprice)为0,系统会报错,不能运行<br />
<span id="more-240"></span><br />
把sum(baseprice) 改为<br />
nullif(sum(isnull(baseprice,0)),0)<br />
就可以了，除于0会出错，除于null就不会出错了</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/4200933116339.gif" border="0" alt="" /></p>
<p>2.列出某年1-12月数据各产吕的销售数据</p>
<p>Select 产品ID AS 机型, SUM(CASE month(日期) WHEN 1 THEN 销售量 ELSE 0 END)<br />
AS [一月], SUM(CASE month(日期) WHEN 2 THEN 销售量 ELSE 0 END) AS [二月],<br />
SUM(CASE month(日期) WHEN 3 THEN 销售量 ELSE 0 END) AS [三月],<br />
SUM(CASE month(日期) WHEN 4 THEN 销售量 ELSE 0 END) AS [四月],<br />
SUM(CASE month(日期) WHEN 5 THEN 销售量 ELSE 0 END) AS [五月],<br />
SUM(CASE month(日期) WHEN 6 THEN 销售量 ELSE 0 END) AS [六月],<br />
SUM(CASE month(日期) WHEN 7 THEN 销售量 ELSE 0 END) AS [七月],<br />
SUM(CASE month(日期) WHEN 8 THEN 销售量 ELSE 0 END) AS [八月],<br />
SUM(CASE month(日期) WHEN 9 THEN 销售量 ELSE 0 END) AS [九月],<br />
SUM(CASE month(日期) WHEN 10 THEN 销售量 ELSE 0 END) AS [十月],<br />
SUM(CASE month(日期) WHEN 11 THEN 销售量 ELSE 0 END) AS [十一月],<br />
SUM(CASE month(日期) WHEN 12 THEN 销售量 ELSE 0 END) AS [十二月]<br />
FROM DezaiCN_Sale<br />
Where datepart(year, 日期) = 2008<br />
GROUP BY 产品ID</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/m200933116141.gif" border="0" alt="" /></p>
<p>3.数据同比 环比分析<br />
(参考邹捷的<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">SQL</a>）</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">
<p>Create procedure DezaiCn_SaleAnalysisCompareByDate<br />
@compareMonth int<br />
as</p>
<p>&#8211;统计处理<br />
declare   @o_dt1   datetime,@o_dt2   datetime,<br />
@n_dt1   datetime,@beginStasticDate   datetime,@endStasticDate   datetime<br />
&#8211;计算各期的统计时间<br />
select<br />
@beginStasticDate=cast(@compareMonth*100+1   as   char(8)),     &#8211;本期统计的开始日期<br />
@endStasticDate=dateadd(month,1,@beginStasticDate),                 &#8211;本期统计的结束日期<br />
@n_dt1=dateadd(month,-1,@beginStasticDate),               &#8211;上期统计的开始日期<br />
@o_dt1=dateadd(year,-1,@beginStasticDate),                 &#8211;去年同期统计的开始日期<br />
@o_dt2=dateadd(month,1,@o_dt1)                   &#8211;去年同期统计的结束日期</p>
<p>select<br />
店铺名=isnull(a.店铺名,b.店铺名),</p>
<p>本期开始=CONVERT(varchar(12) , @beginStasticDate, 102 ),</p>
<p>本期结束=CONVERT(varchar(12) , @endStasticDate, 102 ),</p>
<p>上期结束=CONVERT(varchar(12) , @n_dt1, 102 ),</p>
<p>本期=isnull(b.销售量2,0),</p>
<p>上期=isnull(b.销售量1,0),<br />
上期差异=isnull(b.销售量2,0)-isnull(b.销售量1,0)  ,<br />
去年开始=CONVERT(varchar(12) , @o_dt1, 102 ),</p>
<p>去年结束=CONVERT(varchar(12) , @o_dt2, 102 ),</p>
<p>去年同期=isnull(a.销售量,0),</p>
<p>去年同期差异=isnull(b.销售量2,0)-isnull(a.销售量,0)</p>
<p>from(<br />
&#8211;去年同期的统计<br />
select   店铺名,销售量=sum(销售量)<br />
from   DezaiCn_Sale<br />
where   日期   between   @o_dt1   and   @o_dt2<br />
group   by   店铺名<br />
)a   full   join(<br />
&#8211;今年及上期统计<br />
select   店铺名,<br />
销售量1=sum(case   when   日期&lt;@beginStasticDate   then    销售量   end),<br />
销售量2=sum(case   when   日期&gt;@beginStasticDate   then   销售量   end)<br />
from   DezaiCn_Sale<br />
where   日期   between   @n_dt1   and   @endStasticDate<br />
group   by   店铺名,店铺名<br />
)b   on   a.店铺名=b.店铺名</p>
<p>GO</p></div>
</div>
<p>执行</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">DECLARE @RC int<br />
DECLARE @compareMonth int<br />
Select @compareMonth = 200903<br />
EXEC @RC = [TEST].[dbo].[DezaiCn_SaleAnalysisCompareByDate] @compareMonth<br />
DECLARE @PrnLine nvarchar(4000)<br />
PRINT &#8216;存储过程: TEST.dbo.DezaiCn_SaleAnalysisCompareByDate&#8217;<br />
Select @PrnLine = &#8216;    返回代码 = &#8216; + CONVERT(nvarchar, @RC)<br />
PRINT @PrnLine</div>
</div>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/x2009331161251.gif" border="0" alt="" /></p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/04/08/240/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/04/08/240/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/04/08/240/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/04/08/240/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/04/08/240/">抓虾</a>
<hr />
</p>
	标签：<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><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<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/03/29/2607/" title="关于数据大容量的导入导出小结[SQL Server] (2010年03月29日)">关于数据大容量的导入导出小结[SQL Server]</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/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>
</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/08/240/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用的一些数据统计SQL语句</title>
		<link>http://www.iwanna.cn/archives/2009/04/08/236/</link>
		<comments>http://www.iwanna.cn/archives/2009/04/08/236/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 02:18:35 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Sql]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=236</guid>
		<description><![CDATA[只有在作统计分析的时候，你才能感觉到数据库的强大，才能感觉到数字游戏的趣味性所在。当然，对于企业而言，则是用于进行决策分析的最好支持之一. 最近刚完工的一个项目中对SQL的运用，让我又对SQL的理解与使用加深了一层。很高兴与大家分享其中的乐趣.
废话少说，我们先建一个原始表吧。

新建表：

 程序代码

Create TABLE [dbo].[DezaiCn_Sale] (
[ID] int IDENTITY(1, 1) NOT NULL,
[日期] datetime NOT NULL,
[销售量] int NOT NULL,
[店铺名] char(10) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_Test_Sale] PRIMARY KEY CLUSTERED ([ID])
)
ON [PRIMARY]
GO

如图：

生成测试数据：

 程序代码

/* Data for the `dbo.DezaiCn_Sale` table  (Records 1 &#8211; 18) */
Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])
VALUES (&#8216;20080101&#8242;, 2500, N&#8217;A')
GO
Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])
VALUES (&#8216;20080101&#8242;, 2700, N&#8217;B')
GO
Insert INTO [...]]]></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>的理解与使用加深了一层。很高兴与大家分享其中的乐趣.<br />
废话少说，我们先建一个原始表吧。<br />
<span id="more-236"></span><br />
新建表：</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">
<p>Create TABLE [dbo].[DezaiCn_Sale] (<br />
[ID] int IDENTITY(1, 1) NOT NULL,<br />
[日期] datetime NOT NULL,<br />
[销售量] int NOT NULL,<br />
[店铺名] char(10) COLLATE Chinese_PRC_CI_AS NOT NULL,<br />
CONSTRAINT [PK_Test_Sale] PRIMARY KEY CLUSTERED ([ID])<br />
)<br />
ON [PRIMARY]<br />
GO</p></div>
</div>
<p>如图：</p>
<p><img src="http://www.dezai.cn/blog/attachments/month_0903/42009317161229.gif" border="0" alt="" /></p>
<p>生成测试数据：</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">
<p>/* Data for the `dbo.DezaiCn_Sale` table  (Records 1 &#8211; 18) */</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080101&#8242;, 2500, N&#8217;A')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080101&#8242;, 2700, N&#8217;B')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080201&#8242;, 3600, N&#8217;C')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080201&#8242;, 5800, N&#8217;D')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080301&#8242;, 2500, N&#8217;A')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080301&#8242;, 2700, N&#8217;B')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080401&#8242;, 3600, N&#8217;C')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080401&#8242;, 5800, N&#8217;D')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080301&#8242;, 2500, N&#8217;A')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080101&#8242;, 2700, N&#8217;B')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080501&#8242;, 3600, N&#8217;C')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080701&#8242;, 4000, N&#8217;D')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20081201&#8242;, 2500, N&#8217;A')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080301&#8242;, 2700, N&#8217;B')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20081101&#8242;, 6500, N&#8217;C')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20081001&#8242;, 5800, N&#8217;D')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080601&#8242;, 3800, N&#8217;D')<br />
GO</p>
<p>Insert INTO [dbo].[DezaiCn_Sale] ([日期], [销售量], [店铺名])<br />
VALUES (&#8216;20080801&#8242;, 5400, N&#8217;B')<br />
GO</p></div>
</div>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/q2009317161251.gif" border="0" alt="" /></p>
<p>有了数据，游戏就开始了.呵呵.一个一个来吧，哈哈.</p>
<p>&lt;1&gt;查询所有数据</p>
<p>Select *<br />
FROM DezaiCn_Sale</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/k200931716132.gif" border="0" alt="" /></p>
<p>&lt;2&gt;查询指定销售商的数据</p>
<p>Select *<br />
FROM DezaiCn_Sale where 店铺名=&#8217;A&#8217;</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/n2009317161359.gif" border="0" alt="" /></p>
<p>&lt;3&gt;查询指定销售商某日的数据</p>
<p>Select *<br />
FROM DezaiCn_Sale<br />
Where (店铺名 = &#8216;A&#8217;) AND (日期 = &#8216;2008-12-1&#8242;)</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/x2009317161536.gif" border="0" alt="" /></p>
<p>&lt;4&gt;查询指定销售商某时间段的数据</p>
<p>Select *<br />
FROM DezaiCn_Sale<br />
Where (店铺名 = &#8216;A&#8217;) AND (日期 BETWEEN &#8216;2008-1-1&#8242; AND &#8216;2008-9-1&#8242;)</p>
<p>注意：前面的日期要小于后面的日期,这里也可以用&gt;= 与&lt;=来实现同样的结果</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/w2009317161740.gif" border="0" alt="" /></p>
<p>&lt;5&gt;查询所有销售商按月统计的销售量</p>
<p>Select 日期, 店铺名, 销售量<br />
FROM DezaiCn_Sale<br />
GROUP BY 日期, 店铺名, 销售量<br />
orDER BY 店铺名</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/72009317162138.gif" border="0" alt="" /></p>
<p>这里其实就是排列了一下数据.与&lt;1&gt;中的结果没有什么多大变化.</p>
<p>&lt;6&gt;查询各销售商的销售总量</p>
<p>Select 店铺名, SUM(销售量) AS 销售总量<br />
FROM DezaiCn_Sale<br />
GROUP BY 店铺名</p>
<p><img src="http://www.dezai.cn/blog/attachments/month_0903/72009317162954.gif" border="0" alt="" /></p>
<p>&lt;6&gt;查询指定销售商指定时间段的销售总量</p>
<p>Select 店铺名, SUM(销售量) AS 销售总量<br />
FROM DezaiCn_Sale<br />
Where (店铺名 = &#8216;A&#8217;) AND (日期 BETWEEN &#8216;2008-1-1&#8242; AND &#8216;2008-9-1&#8242;)<br />
GROUP BY 店铺名</p>
<p><img src="http://www.dezai.cn/blog/attachments/month_0903/g2009317163259.gif" border="0" alt="" /></p>
<p>&lt;7&gt;查询具体时间的总的销售总量</p>
<p>Select SUM(销售量) AS 销售总量, 日期<br />
FROM DezaiCn_Sale<br />
Where (日期 = &#8216;2008-3-1&#8242;)<br />
GROUP BY 日期</p>
<p><img src="http://www.dezai.cn/blog/attachments/month_0903/82009317163647.gif" border="0" alt="" /></p>
<p>上 面列了这么多，我觉得大家应该很清楚其中的变化了。无非就是Sum(),Count(),Max()函数及Between的利用 再加Group By 的使用，而以上这些都是很基础又很实用的。上面这些在统计中一般用于进行数据统计时用.如果再增加一个字段列为产品名称或产品分类，也是要利用Group By去实现统计数据功能。</p>
<p>下面这个表基于增加了产品ID字段进行数据统计分析功能,主要是横向的比较了.关键是行转列，列转行的操作，如果是用存储过程，那就是拼字符串了。</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/j2009317165316.gif" border="0" alt="" /></p>
<p>&lt;1&gt;指定店铺在某时间段的销售数据(横向)</p>
<p><span style="color: red;">我这里用存储数据来实现,这里要注意的是拼字符串时单双引号的使用，我在此吃了不少苦头。</span></p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">Create procedure  DezaiCnTestSale_SalerCompareSaleByDate  /*代理销售产品比较分析*/</p>
<p>@ProductIDArray varchar(1000), /*产品ID组*/</p>
<p>@begindate datetime, /*比较开始日期*/</p>
<p>@endDate datetime,/*比较结束日期*/</p>
<p>@Shop varchar(20) /*店铺名*/</p>
<p>as</p>
<p>declare @<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a> varchar(8000)</p>
<p>set @<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a> = &#8217;select 产品ID &#8216;</p>
<p>select @<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> + &#8216; , max(case Convert(Varchar(10),日期,120) when &#8221;&#8217; + Convert(Varchar(10),日期,120) + &#8221;&#8217; then 销售量 else 0 end) [' + Convert(Varchar(10),日期,120) + ']&#8216;</p>
<p>from (select distinct 日期 from DezaiCn_Sale where 日期 between @begindate  and @endDate  ) as a</p>
<p>set @<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> + &#8216; from DezaiCn_Sale where   产品ID in (&#8216;+@ProductIDArray+&#8217;) and 店铺名=&#8221;&#8217;+@Shop+&#8221;&#8217;  group by 产品ID&#8217;</p>
<p>exec(@<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>)<br />
GO</p></div>
</div>
<p>运行效果：</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">
<p>DECLARE @RC int<br />
DECLARE @ProductIDArray varchar(1000)<br />
DECLARE @begindate datetime<br />
DECLARE @endDate datetime<br />
DECLARE @Shop varchar(20)<br />
Select @ProductIDArray = &#8216;1,3,4&#8242;<br />
Select @begindate = &#8216;2008-1-1&#8242;<br />
Select @endDate = &#8216;2008-9-1&#8242;<br />
Select @Shop = &#8216;A&#8217;<br />
EXEC @RC = [TEST].[dbo].[DezaiCnTestSale_SalerCompareSaleByDate] @ProductIDArray, @begindate, @endDate, @Shop<br />
DECLARE @PrnLine nvarchar(4000)<br />
PRINT &#8216;存储过程: TEST.dbo.DezaiCnTestSale_SalerCompareSaleByDate&#8217;<br />
Select @PrnLine = &#8216;    返回代码 = &#8216; + CONVERT(nvarchar, @RC)<br />
PRINT @PrnLine</p></div>
</div>
<p>效果：</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/z2009317171243.gif" border="0" alt="" /></p>
<p>&lt;2&gt;指定产品在某时间段的所选销售商的销售量数据比较</p>
<p><span style="color: red;">在这里我加了一个店铺名ID的字段，因为用数字进行拼字符串比用字符拼要顺畅得多。(个人之见)</span></p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">/*<br />
作者: Dezai<br />
日期: 2008-12-01<br />
作用:对具体某产品根据所选择的代理商进行销售比较分析<br />
*/</p>
<p>Create procedure DezaiCnTestSale_SalerCompareSaleByDateAndDetailProduct</p>
<p>@ShopArray varchar(1000), /*店铺ID数组*/</p>
<p>@begindate datetime, /*开始时间*/</p>
<p>@endDate datetime,/*结束时间*/</p>
<p>@产品ID varchar(10) /*具体产品ID*/</p>
<p>as</p>
<p>declare @<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a> varchar(8000)</p>
<p>set @<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a> = &#8217;select 店铺ID &#8216;</p>
<p>select @<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> + &#8216; , max(case Convert(Varchar(10),日期,120) when &#8221;&#8217; + Convert(Varchar(10),日期,120) + &#8221;&#8217; then 销售量 else 0 end) [' + Convert(Varchar(10),日期,120) + ']&#8216;</p>
<p>from (select distinct 日期 from DezaiCn_Sale where 日期 between @begindate  and @endDate  ) as a</p>
<p>set @<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> + &#8216; from DezaiCn_Sale where 产品ID=&#8217;+@产品ID+&#8217; and  店铺ID in (&#8216;+@ShopArray+&#8217;) group by 店铺ID&#8217;</p>
<p>exec(@<a href="http://www.iwanna.cn/tags/sql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Sql">sql</a>)<br />
GO</p></div>
</div>
<p>效果:</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px;" src="http://www.dezai.cn/blog/images/code.gif" alt="程序代码" /> 程序代码</div>
<div class="UBBContent">DECLARE @RC int<br />
DECLARE @ShopArray varchar(1000)<br />
DECLARE @begindate datetime<br />
DECLARE @endDate datetime<br />
DECLARE @product_ID varchar(10)<br />
Select @ShopArray = &#8216;1,3&#8242;<br />
Select @begindate = &#8216;2008-1-1&#8242;<br />
Select @endDate = &#8216;2008-12-1&#8242;<br />
Select @product_ID = &#8216;3&#8242;<br />
EXEC @RC = [TEST].[dbo].[DezaiCnTestSale_SalerCompareSaleByDateAndDetailProduct] @ShopArray, @begindate, @endDate, @product_ID<br />
DECLARE @PrnLine nvarchar(4000)<br />
PRINT &#8216;存储过程: TEST.dbo.DezaiCnTestSale_SalerCompareSaleByDateAndDetailProduct&#8217;<br />
Select @PrnLine = &#8216;    返回代码 = &#8216; + CONVERT(nvarchar, @RC)<br />
PRINT @PrnLine</div>
</div>
<p>结果：</p>
<p><img style="cursor: pointer;" title="在新窗口打开图片" src="http://www.dezai.cn/blog/attachments/month_0903/x2009317175258.gif" border="0" alt="" /></p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/04/08/236/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/04/08/236/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/04/08/236/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/04/08/236/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/04/08/236/">抓虾</a>
<hr />
</p>
	标签：<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><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<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/2010/03/29/2607/" title="关于数据大容量的导入导出小结[SQL Server] (2010年03月29日)">关于数据大容量的导入导出小结[SQL Server]</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/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>
</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/08/236/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle常用函数集</title>
		<link>http://www.iwanna.cn/archives/2009/04/08/230/</link>
		<comments>http://www.iwanna.cn/archives/2009/04/08/230/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 01:42:54 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=230</guid>
		<description><![CDATA[虽然网上多得是，但是还是自己整理一下，加深印象。
提供给大家 Excel版，方便打印.
点击下载此文件
http://www.dezai.cn/blog/default.asp








数值函数




函数
说明
备注


ABS(n)
返回n的绝对值



ACOS(n) ASIN(A) ATAN(n)
返回n的反余弦 反正弦值 反正切值



COS(n) SIN(n) TAN(n)
返回n的余弦值 正弦值 正切值



FLOOR(n)
返回小于或等于n的最大整数



MOD(m,n)
返回m除以n之后的余数,若n为0,则返回m



CEIL(n)
返回大于等于n的最小整数



ROUND(n,m)
执行四舍五入运算
若省略m,则四舍五入到整数位;若m是负数,则到小数点前m位;若m为正数,则到小数点后m位



EXP(n) LN(n)LOG(n)
返回e的n次幂以E为底的对数 对数



SQRT(n)
返回n的平方根,n必须大于0



SIGN(n)
检测n的正负.
若n小于0，则返回-1;若n等于0,
则返回0.若n大于0,则返回1



聚集函数




COUNT(n)
返回某字段的记录总数



AVG(col_name)
返回某一列的平均值



MAX(exp) MIN(exp)
返回exp参数的最大值 最小值



MEDIAN(exp)
返回exp参数的中间数



SUM(exp)
返回exp参数的总和



Group-ID
判别由Group By说明产生的重复组



Rank(value)
计算在一组值中某值的排列



Greatest(c1,c2)
返回参数列表中的最大值



Least(c1,c2)
返回参数列表中的最小值



COALESCE(c1,c2)
返回该表达式列表中的第一个非空值



VAR-POP(value)
总体方差



字符函数




ASCII(n)
返回n的首字符在ASCII码中对应的十进制数



CHR(n)
返回十进制ASCII码n对应的字符



CONCAT(C1,C2)
将C1连接在C2的后面



LENGTH(C1)
返回字符串C1的长度



LOWER(C1) UPPER(C1)
返回C1的小写 大写



LTRIM(C1) RTRIM(C1)
去掉C1左边的空格 去掉C1右边的空格



INITCAP(c1)
将C1的首字符大写,其它小写



REPLACE(C1,C2，C3)
将C1中出现的C2替换成C3 若C3为空，则将C2删除



SUBSTR(c,m,n)
返回c中以第m位开始算起长度为n的字符串.若m为负数,则从尾数开数



TRANSLATE(C1,C2,C3)
将C1中出现的C2替换成C3 然后返回修改后的C1



RPAD(C1,LENGTH,C2)
LPAD(C1,LENGTH,C2)

RPAD 允许在列的右边填充一组字符 LPAD 允许在
列的左边填充一组字符

添加的字符可以为句号，逗号，感叹号，
字母，数之际



&#124;&#124;
连接符 用于将两个字符串结合在一起



日期及时间函数




sysdate
返回当前数据库的日期时间



current_date
返回现在的最新日期



DBtimezone
返回数据库所在的时区



Add_months(d,n)
返回时间d加了n月后的新时间



Next_day(d,c)
返回日期d后的下一个c



Last_day(d)
返回该日期d所在月份的最后一天



MONTHS_Between(d1,d2)
返回日期d1与d2的相差月数



Extract(c,from d)
返回日期时间d中指定的C部分
C的取值为year,month,day,min,
second,timezone等



localtimestamp(d)
返回一个时间戳



Round(d,format)
将d转换成以format字符串格式指定的格式
format是指oracle的日期格式


转换函数




ASCIISTR(string)
接受一个字符串参数,返回ASCII码



BIN_TO_NUM(n1,n2,n3)
将每位由n1,n2,n3等组成的二进制转变成十进制



Cast(c as t)
将表大字式以转换成数据类型t t为数据类型
t可以为自定义的数据类型


CHARTOROWID(string)
将某个rowID的字符串转换为rowID值



TO_CHAR(X,format)
返回x按format格式转换后的字符串



TO_DATE(X,format)
返回x按format格式转换后的时间类型的数据



TO_Number(X,format)
返回x按format格式转换后的数字类型的数据



TO_Nchar(string,format,params)




Translate(strng,if,then)
在字符串中进行逐字符的替换



DeCODE(value,if,then)
在字符串中进行逐值的替换



CARDINALITY(table_name)
返回嵌套表中的记录数，返回整型



COLLECT(column_name)
用于与cast函数共同创建拥有特定列表的嵌套表,
并将该列强制转换成cast函数中所指定的类型




HEXTORAW
十六进制转换为二进制



RAWTOHEX
二进制转十六进制













其它函数




NVL(exp1,exp2)
如果exp1的值为null,返回exp2；否则返回exp1



NVL2(exp1,exp2,exp3)
同NVL一样运用



UID
返回登录当前会话的用户UID



USER
返回当前登录会话的用户名





© 我想网 Akon 所有 , 2009. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：Oracle, Oracle

	您可能会感兴趣的其他文章
	
	无相关日志
	


Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>虽然网上多得是，但是还是自己整理一下，加深印象。</p>
<p>提供给大家 Excel版，方便打印.</p>
<p><a href="http://www.dezai.cn/blog/attachments/month_0903/s200933103915.xls"><span id="more-230"></span><img src="http://www.dezai.cn/blog/images/download.gif" border="0" alt="" />点击下载此文件</a></p>
<p><a href="http://www.dezai.cn/blog/default.asp">http://www.dezai.cn/blog/default.asp</a></p>
<table style="width: 552pt; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0" width="736">
<colgroup span="1">
<col style="width: 154pt;" span="1" width="205"></col>
<col style="width: 219pt;" span="1" width="292"></col>
<col style="width: 179pt;" span="1" width="239"></col>
</colgroup>
<tbody>
<tr style="height: 21pt;" height="28">
<td class="xl69" style="background-color: #ccffcc;" width="205" height="28"><span>数值函数</span></td>
<td class="xl69" width="292"></td>
<td class="xl69" width="239"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>函数</span></td>
<td class="xl65"><span>说明</span></td>
<td class="xl65"><span>备注</span></td>
</tr>
<tr>
<td class="xl65" height="22"><span>ABS(n)</span></td>
<td class="xl65"><span>返回n的绝对值</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>ACOS(n) ASIN(A) ATAN(n)</span></td>
<td class="xl65"><span>返回n的反余弦 反正弦值 反正切值</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>COS(n) SIN(n) TAN(n)</span></td>
<td class="xl65"><span>返回n的余弦值 正弦值 正切值</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>FLOOR(n)</span></td>
<td class="xl65"><span>返回小于或等于n的最大整数</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>MOD(m,n)</span></td>
<td class="xl65"><span>返回m除以n之后的余数,若n为0,则返回m</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>CEIL(n)</span></td>
<td class="xl65"><span>返回大于等于n的最小整数</span></td>
<td class="xl65"></td>
</tr>
<tr style="height: 48pt;" height="64">
<td class="xl65" style="height: 48pt; background-color: transparent;" height="64"><span>ROUND(n,m)</span></td>
<td class="xl65"><span style="font-size: x-small;"><span style="font-family: 宋体;">执行四舍五入运算</span></span></td>
<td class="xl66" style="width: 179pt; background-color: transparent;" width="239"><span>若省略m,则四舍五入到整数位;若m是负数,则到小数点前m位;若m为正数,则到小数点后m位</p>
<p></span></td>
</tr>
<tr>
<td class="xl65" height="22"><span>EXP(n) LN(n)LOG(n)</span></td>
<td class="xl65"><span>返回e的n次幂以E为底的对数 对数</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>SQRT(n)</span></td>
<td class="xl65"><span>返回n的平方根,n必须大于0</span></td>
<td class="xl65"></td>
</tr>
<tr style="height: 24pt;" height="32">
<td class="xl65" style="height: 24pt; background-color: transparent;" height="32"><span>SIGN(n)</span></td>
<td class="xl65"><span>检测n的正负.</span></td>
<td class="xl66" style="width: 179pt; background-color: transparent;" width="239"><span style="font-size: x-small;"><span style="font-family: 宋体;">若n小于0，则返回-1;若n等于0,</p>
<p>则返回0.若n大于0,则返回1</p>
<p></span></span></td>
</tr>
<tr style="height: 15pt;" height="20">
<td class="xl69" style="background-color: #ccffcc;" height="20"><span>聚集函数</span></td>
<td class="xl69" style=" "></td>
<td class="xl70" width="239"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>COUNT(n)</span></td>
<td class="xl65"><span>返回某字段的记录总数</span></td>
<td class="xl66" style="width: 179pt; background-color: transparent;" width="239"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>AVG(col_name)</span></td>
<td class="xl65"><span>返回某一列的平均值</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>MAX(exp) MIN(exp)</span></td>
<td class="xl65"><span>返回exp参数的最大值 最小值</span></td>
<td class="xl66" style="width: 179pt; background-color: transparent;" width="239"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>MEDIAN(exp)</span></td>
<td class="xl65"><span>返回exp参数的中间数</span></td>
<td class="xl66" style="width: 179pt; background-color: transparent;" width="239"></td>
</tr>
<tr>
<td class="xl65" height="22"><span>SUM(exp)</span></td>
<td class="xl65"><span>返回exp参数的总和</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">G<span class="font6">roup-ID</span></span></span></td>
<td class="xl65"><span style="font-size: x-small;"><span style="font-family: 宋体;">判别由G<span class="font6">roup By说明产生的重复组</span></span></span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">R<span class="font6">ank(value)</span></span></span></td>
<td class="xl65"><span>计算在一组值中某值的排列</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl65" height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">G<span class="font6">reatest(c1,c2)</span></span></span></td>
<td class="xl65"><span>返回参数列表中的最大值</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td height="22"><span>Least(c1,c2)</span></td>
<td><span style="font-size: x-small;"><span style="font-family: 宋体;">返回参数列表中的最小值</span></span></td>
<td></td>
</tr>
<tr>
<td height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">C<span class="font6">OALESCE(c1,c2)</span></span></span></td>
<td><span>返回该表达式列表中的第一个非空值</span></td>
<td></td>
</tr>
<tr>
<td class="xl65" height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">V<span class="font6">AR-POP(value)</span></span></span></td>
<td class="xl65"><span>总体方差</span></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl69" style="background-color: #ccffcc;" height="22"><span>字符函数</span></td>
<td class="xl69" style=" "></td>
<td class="xl69" style=" "></td>
</tr>
<tr>
<td height="22"><span>ASCII(n)</span></td>
<td><span>返回n的首字符在ASCII码中对应的十进制数</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>CHR(n)</span></td>
<td><span>返回十进制ASCII码n对应的字符</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>CONCAT(C1,C2)</span></td>
<td><span>将C1连接在C2的后面</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>LENGTH(C1)</span></td>
<td><span>返回字符串C1的长度</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>LOWER(C1) UPPER(C1)</span></td>
<td><span>返回C1的小写 大写</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>LTRIM(C1) RTRIM(C1)</span></td>
<td><span>去掉C1左边的空格 去掉C1右边的空格</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>INITCAP(c1)</span></td>
<td><span>将C1的首字符大写,其它小写</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>REPLACE(C1,C2，C3)</span></td>
<td><span>将C1中出现的C2替换成C3 若C3为空，则将C2删除</span></td>
<td></td>
</tr>
<tr style="height: 24pt;" height="32">
<td style="height: 24pt; background-color: transparent;" height="32"><span>SUBSTR(c,m,n)</span></td>
<td class="xl68" style="width: 219pt; background-color: transparent;" width="292"><span>返回c中以第m位开始算起长度为n的字符串.若m为负数,则从尾数开数</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>TRANSLATE(C1,C2,C3)</span></td>
<td><span>将C1中出现的C2替换成C3 然后返回修改后的C1</span></td>
<td></td>
</tr>
<tr style="height: 24pt;" height="32">
<td class="xl68" style="width: 154pt; height: 24pt; background-color: transparent;" width="205" height="32"><span>R</span><span class="font6">PAD(C1,LENGTH,C2)</p>
<p>LPAD(C1,LENGTH,C2)</p>
<p></span></td>
<td class="xl68" style="width: 219pt; background-color: transparent;" width="292"><span>R</span><span class="font6">PAD 允许在列的右边填充一组字符 LPAD 允许在</p>
<p>列的左边填充一组字符</p>
<p></span></td>
<td class="xl68" style="width: 179pt; background-color: transparent;" width="239"><span>添加的字符可以为句号，逗号，感叹号，</p>
<p>字母，数之际</p>
<p></span></td>
</tr>
<tr>
<td height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">|<span class="font6">|</span></span></span></td>
<td><span>连接符 用于将两个字符串结合在一起</span></td>
<td></td>
</tr>
<tr>
<td class="xl71" style="background-color: #ccffcc;" height="22"><span>日期及时间函数</span></td>
<td class="xl71" style=" "></td>
<td class="xl71" style=" "></td>
</tr>
<tr>
<td height="22"><span>sysdate</span></td>
<td><span>返回当前数据库的日期时间</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>current_date</span></td>
<td><span>返回现在的最新日期</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>DBtimezone</span></td>
<td><span>返回数据库所在的时区</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>Add_months(d,n)</span></td>
<td><span>返回时间d加了n月后的新时间</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>Next_day(d,c)</span></td>
<td><span>返回日期d后的下一个c</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>Last_day(d)</span></td>
<td><span>返回该日期d所在月份的最后一天</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>MONTHS_Between(d1,d2)</span></td>
<td><span>返回日期d1与d2的相差月数</span></td>
<td></td>
</tr>
<tr style="height: 24pt;" height="32">
<td style="height: 24pt; background-color: transparent;" height="32"><span>Extract(c,from d)</span></td>
<td><span>返回日期时间d中指定的C部分</span></td>
<td class="xl68" style="width: 179pt; background-color: transparent;" width="239"><span>C的取值为year,month,day,min,</p>
<p>second,timezone等</p>
<p></span></td>
</tr>
<tr>
<td height="22"><span>localtimestamp(d)</span></td>
<td><span>返回一个时间戳</span></td>
<td class="xl68" style="width: 179pt; background-color: transparent;" width="239"></td>
</tr>
<tr>
<td height="22"><span>Round(d,format)</span></td>
<td><span>将d转换成以format字符串格式指定的格式</span></td>
<td><span>format是指<a href="http://www.iwanna.cn/tags/oracle/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Oracle">oracle</a>的日期格式</span></td>
</tr>
<tr>
<td class="xl71" style="background-color: #ccffcc;" height="22"><span>转换函数</span></td>
<td class="xl71" style=" "></td>
<td class="xl71" style=" "></td>
</tr>
<tr>
<td height="22"><span>ASCIISTR(string)</span></td>
<td><span>接受一个字符串参数,返回ASCII码</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>BIN_TO_NUM(n1,n2,n3)</span></td>
<td><span>将每位由n1,n2,n3等组成的二进制转变成十进制</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>Cast(c as t)</span></td>
<td><span>将表大字式以转换成数据类型t t为数据类型</span></td>
<td><span>t可以为自定义的数据类型</span></td>
</tr>
<tr>
<td height="22"><span>CHARTOROWID(string)</span></td>
<td><span>将某个rowID的字符串转换为rowID值</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>TO_CHAR(X,format)</span></td>
<td><span>返回x按format格式转换后的字符串</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>TO_DATE(X,format)</span></td>
<td><span>返回x按format格式转换后的时间类型的数据</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>TO_Number(X,format)</span></td>
<td><span>返回x按format格式转换后的数字类型的数据</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>TO_Nchar(string,format,params)</span></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">T<span class="font6">ranslate(strng,if,then)</span></span></span></td>
<td><span>在字符串中进行逐字符的替换</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">D<span class="font6">eCODE(value,if,then)</span></span></span></td>
<td><span>在字符串中进行逐值的替换</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>CARDINALITY(table_name)</span></td>
<td><span>返回嵌套表中的记录数，返回整型</span></td>
<td></td>
</tr>
<tr style="height: 24pt;" height="32">
<td style="height: 24pt; background-color: transparent;" height="32"><span>COLLECT(column_name)</span></td>
<td class="xl68" style="width: 219pt; background-color: transparent;" width="292"><span>用于与cast函数共同创建拥有特定列表的嵌套表,</p>
<p>并将该列强制转换成cast函数中所指定的类型</p>
<p></span></td>
<td></td>
</tr>
<tr>
<td height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">H<span class="font6">EXTORAW</span></span></span></td>
<td><span>十六进制转换为二进制</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span style="font-size: x-small;"><span style="font-family: 宋体;">R<span class="font6">AWTOHEX</span></span></span></td>
<td><span>二进制转十六进制</span></td>
<td></td>
</tr>
<tr>
<td height="22"></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="xl65" height="22"></td>
<td class="xl65"></td>
<td class="xl65"></td>
</tr>
<tr>
<td class="xl71" style="background-color: #ccffcc;" height="22"><span>其它函数</span></td>
<td class="xl71" style=" "></td>
<td class="xl71" style=" "></td>
</tr>
<tr>
<td height="22"><span>NVL(exp1,exp2)</span></td>
<td><span>如果exp1的值为null,返回exp2；否则返回exp1</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>NVL2(exp1,exp2,exp3)</span></td>
<td><span>同NVL一样运用</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>UID</span></td>
<td><span>返回登录当前会话的用户UID</span></td>
<td></td>
</tr>
<tr>
<td height="22"><span>USER</span></td>
<td><span>返回当前登录会话的用户名</span></td>
<td></td>
</tr>
</tbody>
</table>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/04/08/230/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/04/08/230/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/04/08/230/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/04/08/230/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/04/08/230/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/sql/oracle/" title="Oracle" rel="tag nofollow">Oracle</a>, <a href="http://www.iwanna.cn/tags/oracle/" title="Oracle" rel="tag nofollow">Oracle</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li>无相关日志</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/08/230/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL 搜索中的大小写敏感性</title>
		<link>http://www.iwanna.cn/archives/2009/03/30/11/</link>
		<comments>http://www.iwanna.cn/archives/2009/03/30/11/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 15:10:48 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=11</guid>
		<description><![CDATA[在默认的情况下，MySQL搜索不区分大小写（但某些字符集始终区分大小写，如 czech）。这意味着，如果你使用col_name LIKE &#8216;a%&#8217;进行搜索，你将获得以A或a开始的所有列。如果打算使搜索区分大小写，请确保操作数之一具有区分大小写的或二进制校对。例如，如果你正在比较均适用latin1字符集的列和字符串，可使用COLLATE操作符，使1个操作数具有latin1_general_cs或latin1_bin校对特性。例如：





col_name COLLATE latin1_general_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_bin




如果希望总是以区分大小写的方式处理列，可使用区分大小写的或二进制校对声明它。

简单的比较操作（&#62;=, &#62;, =, &#60;, &#60;=, 排序和分组）基于每个字符的“排序值”。具有相同排序值的字符（如‘E’, ‘e’,和‘Ã©’）将被当作相同的写字符。

© 我想网 Akon 所有 , 2009. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：MySQL, SEO, SEO, Sql, Sql

	您可能会感兴趣的其他文章
	
	40+ Web前端开发必备的备忘单[上] 
	使用参数化查询防止SQL注入漏洞 
	19条 WordPress 实用的 SQL 查询语句 
	站长必读 搜索引擎优化12黄金规则 
	站内链接的优化 
	社交媒体(SNS)对搜索引擎优化的6大好处 
	浅谈大型网站的SEO策略及如何执行 
	浅谈大型网站的SEO策略及如何执行 
	更好遵循DIV+CSS设计 网站重构中实现SEO 
	新标准 [...]]]></description>
			<content:encoded><![CDATA[<p>在默认的情况下，<a href="http://www.iwanna.cn/tags/mysql/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with MySQL">MySQL</a>搜索不区分大小写（但某些字符集始终区分大小写，如 czech）。这意味着，如果你使用col_name LIKE &#8216;a%&#8217;进行搜索，你将获得以A或a开始的所有列。如果打算使搜索区分大小写，请确保操作数之一具有区分大小写的或二进制校对。例如，如果你正在比较均适用latin1字符集的列和字符串，可使用COLLATE操作符，使1个操作数具有latin1_general_cs或latin1_bin校对特性。例如：</p>
<p><span id="more-11"></span></p>
<table border="1" cellspacing="0" cellpadding="2" width="400" align="center">
<tbody>
<tr>
<td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
<pre>col_name COLLATE latin1_general_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_bin</pre>
</td>
</tr>
</tbody>
</table>
<p>如果希望总是以区分大小写的<span><a id="hl_0" class="qs_highlight1" style="font-size: 1em;" onmouseover="window.clearTimeout(_ht[0]);qs_show_frame(event,this,0);" onmouseout="_on_div[0]=false;_ht[0]=window.setTimeout('qs_is_on_div(0)',1000);" href="javascript:void(0)">方式</a></span>处理列，可使用区分大小写的或二进制校对声明它。</p>
</p>
<p>简单的比较操作（&gt;=, &gt;, =, &lt;, &lt;=, 排序和分组）基于每个字符的“排序值”。具有相同排序值的字符（如‘E’, ‘e’,和‘Ã©’）将被当作相同的写字符。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/03/30/11/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/03/30/11/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/03/30/11/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/03/30/11/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/03/30/11/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/mysql/" title="MySQL" rel="tag nofollow">MySQL</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><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/06/03/3657/" title="使用参数化查询防止SQL注入漏洞 (2010年06月3日)">使用参数化查询防止SQL注入漏洞</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/23/799/" title="站长必读 搜索引擎优化12黄金规则 (2009年04月23日)">站长必读 搜索引擎优化12黄金规则</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/19/695/" title="站内链接的优化 (2009年04月19日)">站内链接的优化</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/06/2952/" title="社交媒体(SNS)对搜索引擎优化的6大好处 (2010年05月6日)">社交媒体(SNS)对搜索引擎优化的6大好处</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4504/" title="浅谈大型网站的SEO策略及如何执行 (2010年07月13日)">浅谈大型网站的SEO策略及如何执行</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/19/4618/" title="浅谈大型网站的SEO策略及如何执行 (2010年07月19日)">浅谈大型网站的SEO策略及如何执行</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/06/08/1754/" title="新标准 canonical link tag 解决复制内容问题 (2009年06月8日)">新标准 canonical link tag 解决复制内容问题</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/03/30/11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
