﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-为了忘却的纪念   $bestmost-&gt;save("多多益善")-随笔分类-seo搜索</title><link>http://www.phpweblog.net/fuyongjie/category/607.html</link><description>言己及众</description><language>zh-cn</language><lastBuildDate>Thu, 13 Aug 2009 00:00:28 GMT</lastBuildDate><pubDate>Thu, 13 Aug 2009 00:00:28 GMT</pubDate><ttl>60</ttl><item><title>百度和Google收录规律</title><link>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6833.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Wed, 12 Aug 2009 01:34:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6833.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/6833.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/6833.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/6833.html</trackback:ping><description><![CDATA[<div>【友情链接：<a title="天津打折促销购物" href="http://www.tjcuxiao.com" target="_blank">http://www.tjcuxiao.com</a> 和<a title="目击者 肇事 行凶 腐败 贪污" href="http://www.mujiz.cn" target="_blank">http://www.mujiz.cn</a>】<a href="http://hplc2.blog.163.com/blog/static/52546820091210235231/" target="_blank"><br />百度Google收录规律</a></div>
		<div> </div>
		<div>摘要：对于网站的更新和收录，搜索引擎都有它们各自的规律。因此每一次网站的更新收录，都牵动着每一个网站运营者的神经。因为更新收录是百度排名和Google排名的基础，当然每一个网站的自身情况不一样，更新收录也不能一概而论的。根据互联网实战专家黄相如的细心观察与对照，总结出百度、 Google的更新收录规律与现象。现中国B2B研究中心将研究成果披露如下：<br /><br />1、百度更新及收录是根据你网站的质量和更新速度的变化而变化的，你快它也快，你慢它也慢；而Google更新则比较“稳重”，基本上是一周一更新，对于企业网站来说。如果是大门户网上，可能Google更新和收录的情况会不一样。许多网站运营者在进行百度优化和Google优化的时候，就会经常想着，到底是百度更新更快还是Google更新更快？而我觉得这不是一个绝对数。<br /><br />2、百度对原创文章的重视程度比Google更加重视，对于一个完全相同内容的网站，在Google已经收录了上千个网页，而百度则还site不到信息。百度对收录质量也在不断提高，早几年以前都说百度收录的数量很浮夸，而现在，很多大网站的收录数量被砍一半，甚至远远低于Google的收录数量。这一举动也说明百度在改变收录标准和更新标准。<br /><br />3、令百度优化者经常头疼的事就是自己的网站经常被百度 “k”，轻则K过首页，重则K掉其它更多的页面，甚至一毛不留。这是百度对于百度优化作弊者的一种惩罚机制。而且会有一种连带责任。如果某个网站被k，而你的网站有指向它的友情链接，那么你的网站也会被“K”。而且不会事先通知你。出现被“K”是很痛苦的事，如果你不采取补救措施，那么就可能一直“K”之下去。最后你的网站会被踢出百度之门。 
<div><div>一、百度搜索引擎的特点<br /><br />1.基于字词结合的信息处理方式。巧妙解决了中文信息的理解问题，极大地提高了搜索的准确性和查全率。<br /><br />2.支持主流的中文编码标准。包括GBK（汉字内码扩展规范）、GB2312（简体）、BIG5（繁体），并且能够在不同的编码之间转换。<br /><br />3.智能相关度算法。采用了基于内容和基于超链分析相结合的方法进行相关度评价，能够客观分析网页所包含的信息，从而最大限度保证了检索结果相关性。<br /><br />4.检索结果能标示丰富的网页属性（如标题、网址、时间、大小、编码、摘要等），并突出用户的查询串，便于用户判断是否阅读原文。<br /><br />5.百度搜索支持二次检索（又称渐进检索或逼进检索）。可在上次检索结果中继续检索，逐步缩小查找范围，直至达到最小、最准确的结果集。利于用户更加方便地在海量信息中找到自己真正感兴趣的内容。<br /><br />6.相关检索词智能推荐技术。在用户第一次检索后，会提示相关的检索词，帮助用户查找更相关的结果，统计表明可以促进检索量提升10-20%.<br /><br />7.运用多线程技术、高效的搜索算法、稳定的UNIX平台、和本地化的服务器，保证了最快的响应速度。百度搜索引擎在中国境内提供搜索服务，可大大缩短检索的响应时间（一个检索的平均响应时间小于0.5秒）<br /><br />8.可以提供一周、二周、四周等多种服务方式。可以在7天之内完成网页的更新，是目前更新时间最快、数据量最大的中文搜索引擎。<br /><br />9.检索结果输出支持内容类聚、网站类聚、内容类聚+网站类聚等多种方式。支持用户选择时间范围，提高用户检索效率。<br /><br />10.智能性、可扩展的搜索技术保证最快最多的收集互联网信息。拥有目前世界上最大的中文信息库，为用户提供最准确、最广泛、最具时效性的信息提供了坚实基础。<br /><br />11.分布式结构、精心设计的优化算法、容错设计保证系统在大访问量下的高可用性、高扩展性、高性能和高稳定性。<br /><br />12.高可配置性使得搜索服务能够满足不同用户的需求。<br /><br />13.先进的网页动态摘要显示技术。<br /><br />14.独有百度快照。<br /><br />15.支持多种高级检索语法，使用户查询效率更高、结果更准。已支持“+”（AND）、“-”（NOT）、“｜”（OR）、“site：”、“link：”，还将继续增加其它高效的搜索语法。</div><div><div>二、如何面对搜索引擎降权？<br /><br />被Baidu进行降权，甚至被封杀。这些问题是许许多多网站都曾遇见到过的，有些网站并没有进行恶意作弊，优化也是很正常的，是什么原因造成的这些问题？资深的互联网实战专家黄相如对baidu的这一现象进行了深入地研究和分析认为：站在SEO的角度去想，主要是网站的自身原因。一个网站可能会因为结构的不合理性就会容易出现类似的问题。那么如何提升你的站点对搜索引擎的权重？或者是如何解决降权或封站问题呢？今天笔者黄相如将通过这篇文章与大家讨论研究。<br /><br />面对降权要冷静分析，主要问题还是在与网站本身。所以要从网站开始，如果站点已经被降权了我们该怎么办？</div><div><div>一般降权分为四种：<br /><br />1、站点部份收录内容减少；<br /><br />2、网站首页被屏蔽；<br /><br />3、网站外部链接减少；<br /><br />4、网站全部页面删除。<br /><br />站点收录内容减少，面对此问题，首先应该考虑网的内部链接是否存在过失，是不是网站内出现过多死链。网站首页被屏蔽，这类问题主要出现在BAIDU.这个问题解决比较简单，直接将服务器的主机头索引修改为其他页面。或将首页的文件名称重新修改。但是做这些的先决条件是这个页面没有进行过度优化。网站外部链接减少，主要是因为你站点的外部连接质量不高，搜索引擎再进行调整的时候将你的外部那些“垃圾”链接删除。所以一定要注重高质量外部资源。网站全部页面删除，这个问题是比较严重，一般出现了这个问题就意味着你的站点肯定存在很大问题。有可能是过度优化、有可能是网站结构等等。遇到这样的问题必须要将站点恢复原样，去掉多余链接修改网站框架结构。等待搜索引擎重新收录，一般这个周期会很长。如果这个站点域名不是很重要的话，可以考虑换掉域名，重新提交搜索引擎。<br /><br />对于出现搜索引擎对网站降权（搜索引擎封闭站点的某个页面，或减少收录量，这就是我们经常说的降权）或封站（搜索引擎不收录该站点，或者将该站点在搜索引擎中的所有页面删除）问题，主baidu只收录网站的首页。而GOOGLE收录效果却良好。解决这些问题根本上就是要先提升站点在搜索引擎中的权重，让搜索引擎认可您的站点。黄相如在多年的实战研究中，总结了以下问题：</div><br /><div>1.精代码：很多网站都为了自己页面的美观华丽，为了实现一些复杂的功能而使用很多繁琐的程序来进行控制，而且在部署使用这些程序的时候，非常不注意这些程序的工整性，经常没有任何原则的随便胡乱插入，这样会让搜索引擎非常困惑，没有思路。所以为了搜索引擎能够更好的收录您的站点，请放弃那些花哨或一些不实用的功能吧。<br /><br />2.改结构：网站的结构也就是说网站的整体框架。有些网站，为了实现一些在线功能，一个页面出现了多个 iframe.虽然搜索引擎都在进步，Google已经避免了此问题，但Baidu仍然不是很喜欢存在iframe的页面。对于网站的内部链接情况，一定要本着清楚明白、保持链接通畅、尽量不要出现死链坏链情况。对于出现死链问题（如果是自己的服务器），可以重新制定错误信息。定期使用 GoogleWebmasterTools或Xenu来检查自己的站点。<br /><br />说到网站的整体结构，有过SEO经验或营销型网站（从用户体验，到用户行为跟踪，再到最后销售为一体的网站）建设的人都知道，网站漂亮不是目的，目的是将网站的访问用户转换，让网站高效率被搜索引擎认可。而要做到这些，网站的结构是非常重要的。说的简单一些，网站结构就是让用户看到他想看的东西，让他能时刻找到想要的信息和产品，并随时找到你的联系方式。搜索引擎方面，让搜索引擎能够顺利通过页面的链接抓取到网站中的每个页面，具体方面如建立有效的链接导航，让每个页面都具备导航功能，能方便引擎，也能方便用户。建立网站地图，将重要的内容或目录在地图中体现。尽量使用HTML页面。<br /><br />3.重质量：网站应当具有一定的质量，如果一个网站不能给用户提供有价值的信息和内容，会被搜索引擎大打折扣，搜索引擎也一样很注重网站内容、页面质量，内部链接、外部链接质量和网站最终页面质量。黄相如认为网站的优质内容在优化中占据很大比重！既然内容很重要，应该怎样去创造优质内容呢？搜索引擎读取文章只能把网页中的内容分离，分别建立索引，然后通过分词等技术对内容进行机器编译。再后是用户使用引擎搜索相关关键词，搜索引擎提供内容。按照它对页面网站的权重、唯一性等将网站或相关页面提前或靠后，展示给用户。所以对于优质内容来说尽量使用原创内容。每个人的写作方式都是不同的，所体现出来的断词形式，也肯定不同，所以尽量保证内容的原创唯一性。页面质量，指的是最终的终端页面质量，内容也算其一了。黄相如还要指出一些网站不曾注意的但是很重要的方面。很多网站都有自己的新闻页面，这个页面可以说是终端页面了，但是站长都会忘记增加此类页面的关键词和一些最基本的meta标记，具体标记就不说了，真的应该注意一下。但切记不要滥用。Baidu的贴吧、知道、词条，可以说是Baidu的几大产品中最有意义的，这几个产品创造了很多唯一独立内容，而且很多内容都是按照中国人的搜索习惯研制的。也可以说这几个产品为各大搜索引擎都提供了比较好的内容。<br /><br />搜索引擎的进步体现在不断的为用户提供更高质量内容，并且会更注重网站的时效性，搜索引擎会把最新的新闻相关内容提高到搜索引擎搜索结果前面，尤其是新闻搜索。这块做好之后，也可以给你的站点带来一些流量，一些客户。如何来优化网站实效性呢？如何让搜索引擎更快收录到我的新闻终端页面呢？首先要保证的是网站在搜索引擎中的权重，你的站点与搜索引擎必须要有个良好的“合作”关系。让Spider们及时去关注自己的网站，甚至驻留Spider，这你就成功了！主要通过高质量外部资源来托起你的站点。网站页面本身应该注意代码简单，加入应有标记，保持良好链接。还有一点非常重要，那就是新闻页面的名称或目录。页面文件名来尽量使用NEWS071109.HTML或071109.HTML这样的名字，因为这些具有时间代表的文件名称是搜索引擎判断新闻的一个重要条件。对于专题来说搜索引擎也非常喜欢，因为他存在唯一性和时效性，对于目录性的专题来说，搜索引擎也比较喜欢。对于内容，该使用H1的地方一定要使用，并且重点词进行加粗等等。<br /><br />4.轻优化：你在做网站的时候，只要告诉你的设计人员SEO的几个大的原则（网络上有很多介绍SEO的文章，我在这里就不多说了），让他按照这几大原则去做就可以了。千万不要为了优化而优化，这样效果可能适得其反。也不要累积关键词，为了扩大自己外链而疯狂的增加链接。我有很多客户的网站都因此而付出了很大的代价，换来的是搜索引擎对网站的降权，才去找原因。<br /><br />5. 增外链：一个网站有了完美的结构，具备营销而让搜索引擎高度认可的条件后，这就够了吗？黄相如认为这是远远不够的。搜索引擎认可了，如果还要让它高度认可，这就需要外部链接了。外部链接也要注重质量。一个新站点，就不要在乎你的外部链接是否是高质量了。你只要找一些结构合理，不存在欺骗性，不存在过度优化的站点去交换链接好了。因为这些站点都是具备一定潜力的站点，有可能将来就会成为一个高权重的站点。如果网站已经拥有了一些搜索引擎方面的权重，那么在选择外部链接的时候就应该注意一下了，绝对不能与被降权的站点进行链接交换和链接。还有一点，就是不要吝啬你的链接，适当去为一些低权重，高质量的网站进行链接。处处留心，当你看到可以发布自己网站链接的地方一定要发布。但千万不要在那些贴满链接的留言本、论坛等地方发布。还有就是多多加入目录，现在国内有很多非常好的中文目录，如果能加入国外的目录引擎也可以。</div></div></div></div></div><img src ="http://www.phpweblog.net/fuyongjie/aggbug/6833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2009-08-12 09:34 <a href="http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>百度及Google收录网站的一些特征</title><link>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6832.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Wed, 12 Aug 2009 01:31:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6832.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/6832.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/6832.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/6832.html</trackback:ping><description><![CDATA[<p>
				<font face="Verdana">【友情链接：<a title="天津打折促销购物" href="http://www.tjcuxiao.com" target="_blank">http://www.tjcuxiao.com</a> 和<a title="目击者 肇事 行凶 腐败 贪污" href="http://www.mujiz.cn" target="_blank">http://www.mujiz.cn</a>】<br /><br />Google收录有以下特点：</font>
		</p>
		<p>
				<font face="Verdana">　　首先，Google对新站或较新鲜度的东西都比较敏感，有很高的查知性。它会通过外部链接很快查看到你的站点，通常通过外部链接的收录率多少，给予一个站的评价高低，如果发现新站点击或收录率高那么自然收录速度也很快。</font>
		</p>
		<p>
				<font face="Verdana">　　另外，Google 使用 PageRank 技术检查整个网络链接结构，并确定哪些网页重要性最高。然后进行超文本匹配分析，以确定哪些网页与正在执行的特定搜索相关。在综合考虑整体重要性以及与特定查询的相关性之后，Google 才将最相关最可靠的搜索结果放在首位。这也是Google收录网页的特点之一。</font>
		</p>
		<p>
				<font face="Verdana">　　特点二，Google会将链接的文字描述作为关键词加以索引，所以我们在作友情链接时千万要仔细设计链接的文字描述，使之既符合网站的定位又不失相关性，以此博得Google的信任。</font>
		</p>
		<p>
				<font face="Verdana">　　特点三，Google 漫游器会定期抓取 Web，将大量网页列入索引。稍后完成的下一次抓取会注意到新网站、对现有网站的更改以及失效的链接，并对内容的变化在搜索结果中加以调整。</font>
		</p>
		<p>
				<font face="Verdana">　　那么，百度搜索引擎收录习惯，它较重视第一次收录印象，根据第一次印象做为网站重要与非重要衡量指标。相对Google而言，百度搜索引擎的人为参与度较高，也就是说在某些层面上可能由人来决定是否收录网页而不是由机器来决定。所以，网站在登录百度搜索引擎之前最好把内容做得丰富点、原创内容多一点、网页关键词与内容的相关度高一点，这样才能给百度较好的初次印象。</font>
		</p>
		<p>
				<font face="Verdana">　　百度对网页的更新相对Google而言更加敏感，可能这与百度的本土性格有关。百度搜索引擎每周更新，网页视重要性有不同的更新率，频率在几天至一月之间。所以在百度的搜索结果中基本上都标明了收录时间。</font>
		</p>
		<p>
				<font face="Verdana">　　看了以上针对百度与Google的收录习惯，以后大家在优化过程中会更有针对性，在内容方面尽可多些原创，有时候原创会比你刻意增加关键词更有收录效果。</font>
		</p>
		<p>
				<font face="Verdana">　　大家一定要注意，虽然关键字密度是排名的一个重要的因素，当然不可忽略，但最重要的还是内容。很多人都为了达到2%~8%的关键字密度而不故内容质量，刻意地在页面加上所优化的目标关键了，其实这样做有时候反而会得到相反的效果</font>
		</p><img src ="http://www.phpweblog.net/fuyongjie/aggbug/6832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2009-08-12 09:31 <a href="http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>baidu和Google搜索引擎收录网站之比较</title><link>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6831.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Wed, 12 Aug 2009 01:28:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6831.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/6831.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/6831.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/6831.html</trackback:ping><description><![CDATA[【友情链接：<a title="天津打折促销购物" href="http://www.tjcuxiao.com" target="_blank">http://www.tjcuxiao.com</a> 和<a title="目击者 肇事 行凶 腐败 贪污" href="http://www.mujiz.cn" target="_blank">http://www.mujiz.cn</a>】<br />根据搜索引擎当前的发展情况比较和分析一下百度和Google这两大搜索引擎在收录网站方面的区别。 <br /><br />　　<b>首页规则</b><br /><br />　　搜索引擎的索引更新速度是衡量搜索质量的一个重要的参数，对于大型网站（比如门户新闻网站）以及其他更新量大的网站，百度和Google的索引速度都很快，基本上都能做到当天更新。 <br /><br />　　但是对于更新量小的网站，例如博客，两者就有较大区别，Google对于高权重并提交Sitemaps和Ping的网站，索引速度可以达到分钟级别，有时刚刚写完一篇文章，几分钟后，就能在Google中搜索到解决，但是对于百度来说，索引速度较慢，通常仅仅更新了博客网站的首页，搜索文章标题，排在前面的是博客首页或者目录页，而不是文章页。 <br /><br />　　总的来说，百度对于网站首页的关注以及权重给的似乎特别高，而Google对于最终的文章内容页面的关注多于百度。 <br /><br />　　<b>半个月规则</b><br /><br />　　百度对于更新量较小的博客，收录页面有一个奇怪的时间规则限制：半个月规则，根据我对于月光博客文章收录速度的观察，通常情况下，半个月之内发布的文章，使用百度搜索文章标题，排在前面的基本上都是<a class="article" href="http://www.enet.com.cn/enews/" target="_blank">门户网站</a>转载或聚合我的文章，我写的原始文章不见踪影。而使用Google搜索，我的原文基本上都是第一位。 <br /><br />　　而大约半个月之后，我的文章的原始内容才在百度上出现，这时候搜索文章的标题，我的原文才会成为百度搜索结果的第一位。 <br /><br />　　<b>权重计算规则</b><br /><br />　　Google计算权重的方式主要参考页面的反向链接，如果别人转载我的文章并添加了原文链接，那么Google通常会给予原始文章较高的权值，而百度似乎对于自己的网站（百度知道、百度空间、百度百科等）给予较高的权值，并且对于更新频繁的大型门户网站更为青睐，而对于反向链接似乎没有给予太多的权重。 <br /><br />　　<b>新站规则</b><br /><br />　　一个新注册的网站，经过一些宣传之后，通常Google就会对其进行收录，但赋予的权值并不太高。 <br /><br />　　百度对于新站不会立刻收录，并且相当长的时间内都不会收录，当新网站在搜索引擎有了一个不错的表现，并且有了较多的反向链接，会出现一个阀值，百度判断其网站内容不属于明显复制其他网站内容之后，会开始收录这个新站点内容，这时候网站才会出现来自百度的流量。 <br /><br />　　总的来说，在网站收录速度上来看，Google现在比百度要快，不过由于百度的用户更多一些，所以网站搜索来源大多还是来自百度的多一些。不过对于技术博客来说，来源Google的访问量应该和百度旗鼓相当了。 <br /><img src ="http://www.phpweblog.net/fuyongjie/aggbug/6831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2009-08-12 09:28 <a href="http://www.phpweblog.net/fuyongjie/archive/2009/08/12/6831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google Analytics 自定义应用---豆瓣案例</title><link>http://www.phpweblog.net/fuyongjie/archive/2009/08/07/6824.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Fri, 07 Aug 2009 03:05:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2009/08/07/6824.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/6824.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2009/08/07/6824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/6824.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/6824.html</trackback:ping><description><![CDATA[<p>【<a href="http://www.tjcuxiao.com">www.tjcuxiao.com</a>和<a href="http://www.mujiz.cn">www.mujiz.cn</a>友情赞助】</p>
		<p>豆瓣从今年开始也加入 Google Analytics 的统计阵营。让我们通过它加载的 Google Analytics 源码，简单分析一下它都是怎么应用的。</p>
		<p>我们先从豆瓣的源码来看看它的Google Analytics统计代码</p>
		<p style="TEXT-ALIGN: center">
				<img alt="豆瓣 Google Analytics 代码" src="http://www.phpv.net/uploadfile/month_200907/local_SgQWoe9Mkc.jpg" />
				<br />豆瓣 Google Analytics 代码 </p>
		<p>我们知道一般默认的 Google Analytics代码如下：</p>
		<p style="TEXT-ALIGN: center">
				<img alt="默认  Google Analytics 统计代码" src="http://www.phpv.net/uploadfile/month_200907/local_TDkdtTlLOz.jpg" />
				<br />默认 Google Analytics 统计代码 </p>
		<p>两相对比，我们就会发现豆瓣加载 <code>ga.js </code>的方式与默认的方式有些不太一样，由于豆瓣并没有采用 https 加密访问，所以撇弃了默认的ga.js加载方式。</p>
		<p>默认的统计函数，<code>pageTracker </code>也被豆瓣改成了 <code>_ga</code> ，这个只是名称定义上的区别，并没有什么实质的改变。豆瓣的主要应用是下面两个函数：</p>
		<h3>使用 _ga._addOrganic 识别非主流搜索引擎</h3>
		<p>再来看豆瓣比默认 Google Analytics 代码增加的部分，那就是多了数个 <code>_ga._addOrganic </code>，这是 Google Analytics 添加自定义搜索引擎的代码。尽管 Google Analytics 对于主流的搜索引擎都能自动识别，但毕竟能识别的是国外的主流搜索引擎，在国内，像搜狐的 Sogou，QQ 的 soso，网易的有道等搜索引擎，<strong>都不能被 Google Analytics 正确识别，而被当作推荐来源</strong>。这时候我们就可以利用<code>_addOrganic</code> 参数来识别这些非主流搜索引擎，如豆瓣的做法。</p>
		<h3>使用 _addIgnoredOrganic 忽略关键字</h3>
		<p>除了添加自定义搜索引擎，豆瓣在最后还添加了如下这些代码:</p>
		<pre>_ga._addIgnoredOrganic("豆瓣");<br />_ga._addIgnoredOrganic("douban");<br />_ga._addIgnoredOrganic("豆瓣网");<br />_ga._addIgnoredOrganic("www.douban.com");<br /></pre>
		<p>这些代码用来把引号中的关键词从搜索引擎的关键词报告中排除，而当成直接点击量来源。</p>
		<p>为什么要这么做？因为一个知名的大网站，来自这些品牌词的搜索流量都非常大，常常是排在前几位的搜索关键词来源，而这通常是因为搜索引擎养成现在的人都懒得记网址，直接搜索品牌名来记住域名。这些品牌词对于网站的关键词来源分析并没有很直接的帮助，所以在来自品牌词的流量很大的情况下，可以直接把这些关键词识别成直接点击量来源。</p>
		<p>关于<strong>自定义 Google Analytics 搜索引擎</strong>和<strong>排除特定关键词为直接点击量来源</strong>的语法，可以参考<a title="_addOrganic() 与 _addIgnoredOrganic() 用法介绍" href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiSearchEngines.html" target="_blank"> Google Code 上关于这方面的详细介绍。</a></p>
		<h2>通过 _setVar 识别用户</h2>
		<p>当我们登录豆瓣后，再来分析豆瓣的源码，会发现多了一个<code>ga._setVar(”xxxx”)</code>的 Google Analytics 参数。</p>
		<p style="TEXT-ALIGN: center">
				<img alt="豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为" src="http://www.phpv.net/uploadfile/month_200907/local_pFIluyVQXs.jpg" />
				<br />豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为 </p>
		<p>
				<code>_setVar()</code> 函数是 Google Analytics 的用户定义函数，主要用于对特定来源的用户行为进行分类，例如可以对登录浏览的用户设置一个数值，然后在 Google Analytics 后台的<strong>访问者/用户定义</strong> 中查看其浏览属性。</p>
		<p style="TEXT-ALIGN: center">
				<img alt="Google Analytics 访问者/用户定义报告" src="http://www.phpv.net/uploadfile/month_200907/local_LfK9D1bCL3.jpg" width="600" />
				<br />Google Analytics 访问者/用户定义报告 </p>
		<p>分析豆瓣的源码可以知道，豆瓣对每一个登录后的用户，都赋以一个专门的 id 值，这样可以在用户定义报告里，看到整体的登录用户访问行为，乃至每个登录用户的浏览行为。通过这样设定后，豆瓣便可以轻易获取高忠诚度访问用户的访问行为。<a title="_setVar 设置说明" href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._setVar" target="_blank">关于_setVar()的更多说明，请参阅 Google Analytics的技术文档</a></p>
		<p>如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？<a title=" 如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？" href="http://www.google.com/support/googleanalytics/bin/answer.py?hlrm=en&amp;answer=57045" target="_blank">在 Google Analytics 官方的帮助文件，也给出了另外一个应用案例</a></p>
		<p>值得注意的是，原来在设置 <code>_setVar()</code> 函数的时候，整个网站的跳出率会出现重大的偏差，不过在<a title="Google Analytics修正_setVar函数对网站跳出率的影响" href="http://analytics.blogspot.com/2009/01/using-setvar-heres-update-on-bounce.html" target="_blank">最近的google analytics官方博客，指出该bug已经修正</a>，客户在进行这方面设置的时候，还是要注意对比前后数据是否有重大偏差。</p>
		<h2>通过 _trackPageview 区分不同类型的评论</h2>
		<p>豆瓣上的书评，影评和乐评可以说是豆瓣网站的核心价值所在。一般评论的URL格式如下：</p>
		<p style="TEXT-ALIGN: center">
				<img alt="豆瓣上单条评论的URL" src="http://www.phpv.net/uploadfile/month_200907/local_LP9SBYU5iw.jpg" />
				<br />豆瓣上单条评论的URL </p>
		<p>当我们查看该页面的网页源代码时，会发现有趣的现象:</p>
		<p style="TEXT-ALIGN: center">
				<img alt="豆瓣单条评论页的 Google Analytics 代码" src="http://www.phpv.net/uploadfile/month_200907/local_oBi5X9K3OC.jpg" />
				<br />豆瓣单条评论页的 Google Analytics 代码 </p>
		<p>我们知道，一般 Google Analytics 的<code>_trackPageview()</code> 括弧中的参数是留空的， Google Analytics 会自动捕获网址的 URL 参数，如果在 <code>_trackPageview()</code>括弧中输入特定的数值，那么在 Google Analytics 的报表中，URL 将是我们指定的参数，而不再是我们在地址栏看到的 URL。</p>
		<p>如上面的例子，我们在 Google Analytics 中看到的URL将是<span style="COLOR: rgb(255,0,0)">/book/review/1946018/</span>，而不再是我们在浏览器地址栏看到的<span style="COLOR: rgb(255,0,0)">/review/1946018/</span></p>
		<p>当所在频道是电影或者音乐时，<code>_trackPageview()</code> 中的参数将根据所在频道的属性，变为/movie/xxxxx 或者 /music/xxxxx的数值。</p>
		<p>豆瓣通过对的参数进行重新指定，主要有以下的好处：</p>
		<p>保证了用户和搜索引擎看到的 URL 比较简短，达到 URL 对用户友好和对搜索引擎友好的目的；而在 Google Analytics 报告中，通过 <span style="COLOR: rgb(255,0,0)">内容/内容细目/ </span>报告，又能了解到各个频道总的浏览情况。</p>
		<p>在GA的<span style="COLOR: rgb(255,0,0)">内容细目</span>报告中，将会多出 <span style="COLOR: rgb(255,0,0)">/book/ /music/ /movie/</span> 这样的文件夹来，总而获得各个频道的合计浏览数据。</p>
		<p>而如果只是使用默认 <code>_trackPageview()</code>，你将只能得到所有评论页面的浏览数据，而无法得到细分的各个频道的浏览数据。</p>
		<p>关于<code>_trackPageview()</code>的具体的使用方法<a title="_trackPageview中参数的使用" href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html#_gat.GA_Tracker_._trackPageview" target="_blank">可参照 Google Code 的说明</a></p>
		<p>注意事项:使用 <code>_trackPageview()</code> 参数重新指定 URL 之后，网站覆盖图的数据将受到影响。<a href="http://www.google.com/support/analytics/bin/answer.py?hl=cn&amp;answer=66982" target="_blank">可参阅 Google Analytics 的官方帮助文件</a></p>
		<p>除了豆瓣使用 <code>_trackPageview()</code> 来对URL进行重写，<a href="http://www.dianping.com/" target="_blank">大众点评网</a>也采用了类似的做法（应该是比豆瓣更早采用。。。因为是我在点评网任职时候实验的做法;那时候豆瓣还没有使用 Google Analytis 统计代码，呵呵），有兴趣的同学可以自己去研究点评的 Google Analytis 代码。</p><img src ="http://www.phpweblog.net/fuyongjie/aggbug/6824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2009-08-07 11:05 <a href="http://www.phpweblog.net/fuyongjie/archive/2009/08/07/6824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搜索引擎技术核心揭密PHP版</title><link>http://www.phpweblog.net/fuyongjie/archive/2009/01/20/6293.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Tue, 20 Jan 2009 09:15:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2009/01/20/6293.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/6293.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2009/01/20/6293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/6293.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/6293.html</trackback:ping><description><![CDATA[这是一篇精彩的编程教学文章，不但详细地剖析了搜索引擎的原理，也提供了笔者自己对使用ＰＨＰ编制搜索引擎的一些思路。整篇文章深入浅出，相信无论是高手还是菜鸟，都能从中得到不少的启发。 <br><br>谈到网页搜索引擎时，大多数人都会想到雅虎。的确，雅虎开创了一个互联网络的搜索时代。然而，雅虎目前用于搜索网页的技术却并非该公司原先自己开发的。
2000年8月，雅虎采用了Google（www.google.com）这家由斯坦福大学学生创建的风险公司的技术。理由非常简单，Google的搜索
引擎比雅虎先前使用的技术能更快、更准确搜索到所需要的信息。 <br><br>让我们自己来设计、开发一个强劲、高效的搜索引擎和数据库恐怕短时间内在技术、资金等方面是不可能的，不过，既然雅虎都在使用别人的技术，那么我们是不是也可以使用别人现成的搜索引擎网站呢？ <br><br>剖析编程思路 <br><br>我们可以这样设想：模拟一个查询，向某个搜索引擎网站发出相应格式的搜索命令，然后传回搜索结果，对结果的HTML代码进行分析，剥离多余的字符和代码，最后按所需要的格式显示在我们自己的网站页面里。 <br><br>这样，问题的关键就在于，我们要选定一个搜索信息准确（这样我们的搜索才会更有意义啊）、速度快（因为我们分析搜索结果并显示需要额外的时间），搜索结
果简洁（便于进行HTML源代码分析和剥离）的搜索网站，由于新一代搜索引擎Google的各种优良特性，这里我们选择它为例，来看看用PHP怎样实现后
台对Google(www.google.com)搜索、前台个性化显示这一过程。 <br><br>我们先来看看Google的查询命令的构成。进入www.google.com网站，在查询栏中输入"abcd"，点击查询按钮，我们可以发现浏览器的地址栏变成："<a href="http://www.google.com/search?q=abcd&amp;btnG=Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;lr=%22%EF%BC%8C%E5%8F%AF%E8%A7%81%EF%BC%8CGoogle%E6%98%AF%E9%80%9A%E8%BF%87%E8%A1%A8%E5%8D%95%E7%9A%84get%E6%96%B9%E5%BC%8F%E6%9D%A5%E4%BC%A0%E9%80%92%E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0%E5%B9%B6%E9%80%92%E4%BA%A4%E6%9F%A5%E8%AF%A2%E5%91%BD%E4%BB%A4%E7%9A%84%E3%80%82%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8PHP%E4%B8%AD%E7%9A%84file%28%29%E5%87%BD%E6%95%B0%E6%9D%A5%E6%A8%A1%E6%8B%9F%E8%BF%99%E4%B8%AA%E6%9F%A5%E8%AF%A2%E8%BF%87%E7%A8%8B%E3%80%82" target="_blank"><font color="#0000ff"><u>http:
//www.google.com/search?q=abcd&amp;btnG=Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;
lr="，可见，Google是通过表单的get方式来传递查询参数并递交查询命令的。我们可以使用PHP中的file()函数来模拟这个查询过程。 </u></font></a><br><br>了解File（）函数 <br><br>语法: array file(string filename); <br><br>返回值为数组，将文件全部读入数组变量中。这里的文件可以是本地的，也可以是远程的，远程文件必须指明所使用的协议。例如： result=file("<a href="http://www.google.com/search?q=abcd&amp;btnG=Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;lr=%E2%80%9D%29%EF%BC%8C%E8%AF%A5%E8%AF%AD%E5%8F%A5%E5%B0%86%E6%A8%A1%E6%8B%9F%E6%88%91%E4%BB%AC%E5%9C%A8Google%E4%B8%8A%E6%9F%A5%E8%AF%A2%E5%8D%95%E8%AF%8D%E2%80%9Cabcd%E2%80%9D%E7%9A%84%E8%BF%87%E7%A8%8B%EF%BC%8C%E5%B9%B6%E5%B0%86%E6%90%9C%E7%B4%A2%E7%BB%93%E6%9E%9C%E4%BB%A5%E6%AF%8F%E8%A1%8C%E4%B8%BA%E5%85%83%E7%B4%A0%EF%BC%8C%E4%BC%A0%E5%9B%9E%E5%88%B0%E6%95%B0%E7%BB%84%E5%8F%98%E9%87%8F" target="_blank" result中。因为这里读取的文件是远程的，所以协议名="" http:="" 不能缺少。=""><font color="#0000ff"><u>http:
//www.google.com/search?q=abcd&amp;btnG=Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;
lr=")，该语句将模拟我们在Google上查询单词"abcd"的过程，并将搜索结果以每行为元素，传回到数组变量
result中。因为这里读取的文件是远程的，所以协议名"http://"不能缺少。 </u></font></a><br><br>如果要让用户输入搜索字符进行任意搜索，我们可以做一个输入文本框和提交按钮，并将上文中的被搜索字符"abcd"用变量替换： <br>&lt;?php <br>echo '&lt;form&gt;'; //没有参数的form，默认提交方式为get，提交到本身 <br>echo '&lt;input type="text" name="keywords"&gt;'; //构造一个文本输入框 <br>echo '&lt;input type="submit" value="查询"&gt;'; //构造一个提交查询按钮 <br>echo '&lt;/form&gt;'; <br><br>if (isset( keywords)) //提交后PHP会生成变量 kwywords,即要求下面的程序在提交后运行 <br>{ <br>urlencode( keywords); //对用户输入内容进行URL编码 <br>result=file("<a href="http://www.google.com/search?q=%22." target="_blank" keywords.&quot;&amp;btng="Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;lr=&quot;);"><font color="#0000ff"><u>http://www.google.com/search?q=". keywords."&amp;btnG=Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;lr="); </u></font></a><br>//对查询语句进行变量替换,将查询结果保存在数组变量 result中 <br>result_string=join(" ", result); //将数组$result合并成字符串，各数组元素之间用空格粘和 <br>... //进一步处理 <br>} <br>?&gt; <br><br>上面的这段程序已经能按用户输入内容进行查询，并将返回的结果合成一个字符串变量$result_string。请注意要使用urlencode()函
数将用户输入内容进行URL编码，才可以正常地对输入的汉字、空格以及其他特殊字符进行查询，这样做也是尽可能逼真地模拟Google的查询命令，保证搜
索结果的正确性。 <br><br>对Google的分析 <br><br>为了便于理解，现在假设我们所真正需要的东西是：搜索结果的标题。网址
和简介等，这是一个简洁而典型的需求。这样，我们所要做的便是：去除Google搜索结果的台头和脚注，包括一个Google的标志、再次搜索的输入框和
搜索结果说明等，并且在剩余的搜索结果各项条目中剥离原来的HTML格式标记，替换成我们想要的格式。 <br><br>要做到这一点，我们必须仔
细地分析Google搜索结果的HTML源码，找到其中的规律。不难发现，在Google的搜索结果的正文总是包含在源码的第一个&lt;p&gt;标记
和倒数第二个&lt;p&gt;标记之间，并且倒数第二个&lt;p&gt;标记后紧跟table字符，而且这个组合"&lt;p&gt;&lt;
table"在源码中也仅有一次，利用这个特点，我们可以这样去除Google的台头和脚注。 <br><br>以下所有程序均依次接续在上文程序的"进一步处理"处。 <br><br>result_string = strstr( result_string, "&lt;p&gt;"); //取 result_string从第一个&lt;p&gt;开始后的字符串，以去除Google台头 <br>position= strpos( result_string,"&lt;p&gt;table符号的位置 <br>result_string= substr( result_string,0, position);//截取第一个&lt;p&gt;table符号之前的字符串,以去除脚注 <br><br>应用与实现 <br><br>OK，现在我们已经得到有用的HTML源码主干了，剩下的问题是如何自主地显示这些内容。我们再分析一下这些搜索结果条目，发现每个条目之间也是很有规律的用 <br>分隔，也就是各成一个段落，按这个特点我们用explode()函数把每个条目切开： <br><br>语法：explode(string separator, string string); <br><br>返回一个数组，按separator切开后的各个小字串被保存在数组中。 <br><br>于是： <br>result_array=explode("&lt;p&gt;", result_string); //用字串"&lt;p&gt;"把结果切开 <br><br>我们就得到一个数组 result_array，其中每个元素都是一个搜索结果条目。我们所要做的仅仅是研究每个条目及其HTML显示格式代码，然后按要求替换就行了。下面用循环来处理 result_array中的每个条目。 <br>for( i=0; i { <br>... //处理每个条目 <br>} <br><br>对于每个条目，我们也很容易找到一些特点：每个条目都由标题、摘要、简介、类别、网址等组成，每个部分都换行，即包含&lt;br&gt;标记，于是再次分割：（以下处理程序放在上文的循环中） <br>every_item=explode("&lt;br&gt;", result_array[ i]); <br><br>这样我们得到一个数组 every_item，其中 every_item[0]就是标题， every_item[1]和
every_item[2]两行为摘要， every_item[3]和 every_item[4]等等的头部如果包含"&lt;font
size=-1 color=#6f6f6f &gt;简介:&lt;/font&gt;"、"&lt; font size=-1
color=#6f6f6f&gt;类别:&lt; /font&gt;"字符，则是简介或类别（因为有的结果条目没有该项），如果头部包含"&lt;
font
color=green&gt;"则肯定就是网址啦，这种对比判断我们常使用正则表达式（略），如果要替换也很方便，比如包含标题的$
every_item[0]，其本身是有链接的，我们希望修改这个链接属性，让它在新窗口打开链接： <br>echo eregi_replace(' { <br>... //处理每个条目中除去第一项（第一项为标题，已经显示）的每一项 <br>... //更多格式修改 <br>} <br><br>这样就修改了链接属性，其余很多显示格式的修改、剥离、替换都能用正则替换eregi_replace()来完成。 <br><br>至此我们已经得到了每个搜索条目的每一项，并能任意修改每项的格式，甚至可以给他套上漂亮的表格。然而一个好的程序应该能适应各种运行环境的，这里也不
例外，我们其实还只是讨论了搜索结果的HTML剥离的一种框架方法，真正要做得完美，还要考虑很多内容，比如要显示一共搜索出多少结果，分成多少页等等，
甚至还可以刨除与Google相关的那些"类别"、"简介"等代码，让客户根本看不到原始网站。不过这些内容和要求我们都能通过分析HTML进行剥离得
到。现在大家完全能自己动手，做个极富个性化的搜索引擎啦。（转载自网络）
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/6293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2009-01-20 17:15 <a href="http://www.phpweblog.net/fuyongjie/archive/2009/01/20/6293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何加速动态网站的MySQL索引分析和优化</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5817.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Mon, 22 Sep 2008 06:55:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5817.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5817.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5817.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5817.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">本文主要讲述了如何加速动态网站的MySQL索引分析和优化。
</font></p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><strong>一、什么是索引？ </strong>
</font></p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">索
引用来快速地寻找那些具有特定值的记录，所有MySQL索引都以<span style="color: red;">B-树</span>的形式保存。如果没有索引，执行查询时MySQL必须从第一个记录开始扫描整个表的
所有记录，直至找到符合要求的记录。表里面的记录数量越多，这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引，MySQL无需扫描任何记录即
可迅速得到目标记录所在的位置。如果表有1000个记录，通过索引查找记录至少要比顺序扫描记录快100倍。 </font></p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">假设我们创建了一个名为people的表：
</font></p>
<p style="text-indent: 2em;">
</p>
<center><ccid_nobr>
</ccid_nobr></center>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
    <script type="text/javascript"><!--
google_ad_client = "pub-3707276699544226";
//文章上部728*90
google_ad_slot =" "1325980008";
google_ad_width" = 728;
google_ad_height =" 90;
//--"></script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><script> window.google_render_ad(); </script>
</table>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　 <br><br>　<br>CREATE TABLE people ( peopleid SMALLINT NOT NULL, <br>name CHAR(50) NOT NULL );</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
<font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">然
后，我们完全随机把1000个不同name值插入到people表。在数据文件中name列没有任何明确的次序。<span style="color: red;">如果我们创建了name列的索
引，MySQL将<span style="color: #0817ff;">在索引中排序name列,</span>对于索引中的每一项，MySQL在内部为它保存一个数据文件中实际记录所在位置的&#8220;指针&#8221;</span>。因此，如果我们要查
找name等于&#8220;Mike&#8221;记录的peopleid（SQL命令为&#8220;SELECT peopleid FROM people WHERE
name='Mike';&#8221;），MySQL能够在name的索引中查找&#8220;Mike&#8221;值，然后直接转到数据文件中相应的行，准确地返回该行的
peopleid（999）。在这个过程中，MySQL只需处理一个行就可以返回结果。如果没有&#8220;name&#8221;列的索引，MySQL要扫描数据文件中的所有
记录，即1000个记录！显然，需要MySQL处理的记录数量越少，则它完成任务的速度就越快。 </font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><strong>二、索引的类型 </strong>
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">MySQL提供多种索引类型供选择：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><span style="color: #0817ff;">普通索引</span> :
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">这是最基本的索引类型，而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">创建索引，例如CREATE INDEX &lt;索引的名字&gt; ON tablename (列的列表)；
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">修改表，例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表)；
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">创建表的时候指定索引，例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) )；
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><span style="color: #0817ff;">唯一性索引:</span>
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">这种索引和前面的&#8220;普通索引&#8221;基本相同，但有一个区别：<span style="color: #ff0000;">索引列的所有值</span>都只能出现一次，即必须唯一。唯一性索引可以用以下几种方式创建：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">创建索引，例如CREATE UNIQUE INDEX &lt;索引的名字&gt; ON tablename (列的列表)；
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">修改表，例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表)；
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">创建表的时候指定索引，例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) )；
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em; color: #0817ff;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">主键 :
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">主
键是一种唯一性索引，但它必须指定为&#8220;PRIMARY
KEY&#8221;。如果你曾经用过AUTO_INCREMENT类型的列，你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定，例如&#8220;CREATE
TABLE tablename ( [...], PRIMARY KEY (列的列表) );
&#8221;。但是，我们也可以通过修改表的方式加入主键，例如&#8220;ALTER TABLE tablename ADD PRIMARY KEY (列的列表);
&#8221;。每个表只能有一个主键。 </font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em; color: #0010ff;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">全文索引:
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">MySQL
从3.23.23版开始支持全文索引和全文检索。在MySQL中，全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型
的列上创建。它可以通过CREATE TABLE命令创建，也可以通过ALTER TABLE或CREATE
INDEX命令创建。对于大规模的数据集，通过ALTER TABLE（或者CREATE
INDEX）命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引，要了解更多信息，请参见MySQL
documentation。 </font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><strong>三、单列索引与多列索引 </strong>
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">索引可以是单列索引，也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表：
</font></p>
<p style="text-indent: 2em;">
</p>
<center><ccid_nobr>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>CREATE TABLE people ( peopleid <br>SMALLINT NOT NULL AUTO_INCREMENT,<br>firstname CHAR(50) NOT NULL, lastname CHAR(50) NOT NULL, <br>age SMALLINT NOT NULL,<br>townid SMALLINT NOT NULL, PRIMARY KEY (peopleid) );</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">下面是我们插入到这个people表的数据：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">这个数据片段中有四个名字为&#8220;Mikes&#8221;的人（其中两个姓Sullivans，两个姓McConnells），有两个年龄为17岁的人，还有一个名字与众不同的Joe Smith。
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">这
个表的主要用途是根据指定的用户姓、名以及年龄返回相应的peopleid。例如，我们可能需要查找姓名为Mike
Sullivan、年龄17岁用户的peopleid（SQL命令为SELECT peopleid FROM people WHERE
firstname='Mike' AND lastname='Sullivan' AND
age=17；）。由于我们不想让MySQL每次执行查询就去扫描整个表，这里需要考虑运用索引。 </font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">首
先，我们可以考虑在单个列上创建索引，比如firstname、lastname或者age列。如果我们创建firstname列的索引（ALTER
TABLE people ADD INDEX firstname
(firstname)；），MySQL将通过这个索引迅速把搜索范围限制到那些firstname='Mike'的记录，然后再在这个&#8220;中间结果集&#8221;上
进行其他条件的搜索：它首先排除那些lastname不等于&#8220;Sullivan&#8221;的记录，然后排除那些age不等于17的记录。当记录满足所有搜索条件之
后，MySQL就返回最终的搜索结果。 </font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">由
于建立了firstname列的索引，与执行表的完全扫描相比，MySQL的效率提高了很多，但我们要求MySQL扫描的记录数量仍旧远远超过了实际所需
要的。虽然我们可以删除firstname列上的索引，再创建lastname或者age列的索引，但总地看来，不论在哪个列上创建索引搜索效率仍旧相
似。 </font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">为了提高搜索效率，我们需要考虑运用<span style="color: #2e10ff;">多列索引</span>(<span style="color: #2e10ff;">复合索引</span>)。如果为firstname、lastname和age这三个列创建一个多列索引，MySQL只需一次检索就能够找出正确的结果！下面是创建这个多列索引的SQL命令：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><span style="color: #ff0000;">ALTER TABLE people ADD INDEX fname_lname_age (<span style="color: #2e10ff;">firstname</span>,lastname,age)</span>；
</font></p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">由于索引文件以B-树格式保存，MySQL能够立即转到合适的firstname，然后再转到合适的lastname，最后转到合适的age。在没有扫描数据文件任何一个记录的情况下，MySQL就正确地找出了搜索的目标记录！
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">那
么，如果在firstname、lastname、age这三个列上分别创建单列索引，效果是否和创建一个firstname、lastname、age
的多列索引一样呢？答案是否定的，两者完全不同。<span style="color: #ff0000;">当我们执行查询的时候，MySQL只能使用一个索引</span>。<span style="color: #ff0000;">如果你有三个单列的索引，MySQL会试图选择一个
限制最严格的索引</span>。但是，即使是限制最严格的单列索引，它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><strong>四、最左前缀 </strong>
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><span style="color: #ff0000;">多
列索引还有另外一个优点</span>，它通过称为最左前缀（Leftmost
Prefixing）的概念体现出来。继续考虑前面的例子，现在我们有一个firstname、lastname、age列上的多列索引，我们称这个索引
为fname_lname_age。当搜索条件是以下各种列的组合时，MySQL将使用fname_lname_age索引： </font></p>
<p style="text-indent: 2em;">
</p>
<center><ccid_nobr>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>firstname，lastname，age<br>firstname，lastname<br>firstname</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">从另一方面理解，它相当于我们创建了(firstname，lastname，age)、(firstname，lastname)以及(firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引：
</font></p>
<p style="text-indent: 2em;">
</p>
<center><ccid_nobr>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　 　<br>SELECT peopleid FROM people <br>WHERE firstname='Mike' AND lastname='Sullivan' AND age='17'; <br>SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan'; <br>SELECT peopleid FROM people WHERE firstname='Mike'; <br><br>The following queries cannot use the index at all: <br><br>SELECT peopleid FROM people WHERE lastname='Sullivan'; <br>SELECT peopleid FROM people WHERE age='17'; <br>SELECT peopleid FROM people WHERE lastname='Sullivan' AND age='17';</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;=""><strong>五、选择索引列 </strong>
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">在性能优化过程中，选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列：<span style="color: #ff0000;">在WHERE子句中出现的列</span>，<span style="color: #ff0000;">在join子句中出现的列</span>。请看下面这个查询：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;">
</p>
<center><ccid_nobr>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>SELECT age ## 不使用索引<br>FROM people WHERE firstname='Mike' ## 考虑使用索引<br>AND lastname='Sullivan' ## 考虑使用索引</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">这个查询与前面的查询略有不同，但仍属于简单查询。由于age是在SELECT部分被引用，MySQL不会用它来限制列选择操作。因此，对于这个查询来说，创建age列的索引没有什么必要。下面是一个更复杂的例子：
</font></p>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;">
</p>
<center><ccid_nobr>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　 <br><br>　<br>SELECT people.age, ##不使用索引<br>town.name ##不使用索引<br>FROM people LEFT JOIN town ON<br>people.townid=town.townid ##考虑使用索引<br>WHERE firstname='Mike' ##考虑使用索引<br>AND lastname='Sullivan' ##考虑使用索引</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">
</font>
<p style="text-indent: 2em;">
</p>
<p style="text-indent: 2em;"><font id="" font_word="" class="htd" font-size:14px;="" font-family:宋体,="" verdana,="" arial,="" helvetica,="" sans-serif;="">与
前面的例子一样，由于firstname和lastname出现在WHERE子句中，因此这两个列仍旧有创建索引的必要。除此之外，由于town表的
townid列出现在join子句中，因此我们需要考虑创建该列的索引。那么，我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一
个列呢？差不多如此，但并不完全。我们还必须考虑到对列进行比较的操作符类型<span style="color: #ff0000; background-color: yellow;">。MySQL只有对以下操作符才使用索引：&lt;，&lt;=，=，&amp;
gt;，&gt;=，BETWEEN，IN，以及<span style="color: #0010ff;">某些时候的LIKE</span></span>。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符（%或者_）开头
的情形。例如，&#8220;SELECT peopleid FROM people WHERE firstname LIKE
'Mich%';&#8221;这个查询将使用索引，但&#8220;SELECT peopleid FROM people WHERE firstname LIKE
'%ike';&#8221;这个查询不会使用索引。</font></p>
<script type="text/javascript"><!--
google_ad_client = "pub-3707276699544226";
//300x250, 创建于 07-11-9
google_ad_slot =" "4047345889";
google_ad_width" = 300;
google_ad_height =" 250;
//--"></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><script> window.google_render_ad(); </script><iframe name="google_ads_frame" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3707276699544226&amp;dt=1222063348905&amp;lmt=1222063339&amp;prev_slotnames=7187470415%2C7187470415%2C1009886008%2C1325980008&amp;output=html&amp;slotname=4047345889&amp;correlator=1222063342610&amp;url=http%3A%2F%2Funix-cd.com%2Funixcd12%2Farticle_7014.html&amp;frm=0&amp;cc=24&amp;ga_vid=1554227699.1222062734&amp;ga_sid=1222062734&amp;ga_hid=383168390&amp;ga_fc=true&amp;flash=9.0.124&amp;u_h=1024&amp;u_w=1280&amp;u_ah=994&amp;u_aw=1280&amp;u_cd=32&amp;u_tz=480&amp;u_his=1&amp;u_nplug=7&amp;u_nmime=16" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" width="300" frameborder="0" height="250"></iframe><br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-22 14:55 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql Explain 详解</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5816.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Mon, 22 Sep 2008 03:19:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5816.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5816.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5816.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5816.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br><br><br>一.语法<br><br>explain&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">&nbsp;table_name&nbsp;</span><span style="color: #808080;">&gt;</span><span style="color: #000000;"><br><br>例如:&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">;<br><br>二.explain输出解释<br><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br></span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">.id<br>&nbsp;&nbsp;我的理解是SQL执行的顺利的标识,SQL从大到小的执行.<br><br>例如:<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">)&nbsp;a)&nbsp;b;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived3</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>很显然这条SQL是从里向外的执行,就是从id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;向上执行.<br><br></span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">.&nbsp;select_type<br><br>就是select类型,可以有以下几种<br><br>(</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">)&nbsp;SIMPLE<br>简单SELECT(不使用UNION或子查询等)&nbsp;例如:<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">).&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;"><br><br>我的理解是最外层的select.例如:<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">)&nbsp;a&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">).</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;"><br><br>UNION中的第二个或后面的SELECT语句.例如<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">union</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">all</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;RESULT&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">union1,</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">).DEPENDENT&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;"><br><br>UNION中的第二个或后面的SELECT语句，取决于外面的查询<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">union</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">all</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3)&nbsp;&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------------+------------+--------+-------------------+---------+---------+-------+------+--------------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------------+------------+--------+-------------------+---------+---------+-------+------+--------------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DEPENDENT&nbsp;SUBQUERY&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DEPENDENT&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;eq_ref&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;func&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">;&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;RESULT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">union2,</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------------+------------+--------+-------------------+---------+---------+-------+------+--------------------------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">).</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;RESULT<br><br>UNION的结果。<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">union</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">all</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">UNION</span><span style="color: #000000;">&nbsp;RESULT&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">union1,</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------+------------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">5</span><span style="color: #000000;">).SUBQUERY<br><br>子查询中的第一个SELECT.<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;)&nbsp;&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SUBQUERY&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">6</span><span style="color: #000000;">).&nbsp;&nbsp;DEPENDENT&nbsp;SUBQUERY<br><br>子查询中的第一个SELECT，取决于外面的查询<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;)&nbsp;&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------------+-------+-------+-------------------+---------+---------+-------+------+--------------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------------+-------+-------+-------------------+---------+---------+-------+------+--------------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">;&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DEPENDENT&nbsp;SUBQUERY&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+--------------------+-------+-------+-------------------+---------+---------+-------+------+--------------------------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br><br>(</span><span style="color: #800000; font-weight: bold;">7</span><span style="color: #000000;">).DERIVED<br><br>派生表的SELECT(FROM子句的子查询)<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">)&nbsp;a&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br><br></span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">.</span><span style="color: #0000ff;">table</span><span style="color: #000000;"><br><br>显示这一行的数据是关于哪张表的.<br>有时不是真实的表名字,看到的是derivedx(x是个数字,我的理解是第几步执行的结果)<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">)&nbsp;a)&nbsp;b;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived3</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br></span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">.type<br><br>这列很重要,显示了连接使用了哪种类别,有无使用索引.<br>从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL<br><br>(</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">).system<br><br>这是const联接类型的一个特例。表仅有一行满足条件.如下(t3表上的id是&nbsp;</span><span style="color: #0000ff;">primary</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">)<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">)&nbsp;a&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">derived2</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;system&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;DERIVED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+------------+--------+-------------------+---------+---------+------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">).const<br><br>表最多有一个匹配行，它将在查询开始时被读取。因为仅有一行，在这行的列值可被优化器剩余部分认为是常数。const表很快，因为它们只读取一次！<br><br>const用于用常数值比较PRIMARY&nbsp;KEY或UNIQUE索引的所有部分时。在下面的查询中，tbl_name可以用于const表：<br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;tbl_name&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;primary_key</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">；<br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;tbl_name&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;primary_key_part1</span><span style="color: #808080;">=</span><span style="color: #000000;">1和&nbsp;primary_key_part2</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">；<br><br>例如:<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br><br>(</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">).&nbsp;eq_ref<br><br>对于每个来自于前面的表的行组合，从该表中读取一行。这可能是最好的联接类型，除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">。<br><br>eq_ref可以用于使用</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。<br><br>在下面的例子中，MySQL可以使用eq_ref联接来处理ref_tables：<br><br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;ref_table,other_table<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;ref_table.key_column</span><span style="color: #808080;">=</span><span style="color: #000000;">other_table.</span><span style="color: #0000ff;">column</span><span style="color: #000000;">;<br><br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;ref_table,other_table<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;ref_table.key_column_part1</span><span style="color: #808080;">=</span><span style="color: #000000;">other_table.</span><span style="color: #0000ff;">column</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">AND</span><span style="color: #000000;">&nbsp;ref_table.key_column_part2</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;<br><br>例如<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">unique</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;&nbsp;idx_t3_id&nbsp;</span><span style="color: #0000ff;">on</span><span style="color: #000000;">&nbsp;t3(id)&nbsp;;<br>Query&nbsp;OK,&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;rows&nbsp;affected&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.03</span><span style="color: #000000;">&nbsp;sec)<br>Records:&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;&nbsp;Duplicates:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">&nbsp;&nbsp;Warnings:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;"><br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3,t4&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;t3.id</span><span style="color: #808080;">=</span><span style="color: #000000;">t4.accountid;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+--------+-------------------+-----------+---------+----------------------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+--------+-------------------+-----------+---------+----------------------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t4&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;eq_ref&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;dbatest.t4.accountid&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+--------+-------------------+-----------+---------+----------------------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #000000;"><br>(</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">).ref<br><br>对于每个来自于前面的表的行组合，所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀，或如果键不是UNIQUE或PRIMARY&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">（换句话说，如果联接不能基于关键字选择单个行的话），则使用ref。如果使用的键仅仅匹配少量行，该联接类型是不错的。<br><br>ref可以用于使用</span><span style="color: #808080;">=</span><span style="color: #000000;">或</span><span style="color: #808080;">&lt;=&gt;</span><span style="color: #000000;">操作符的带索引的列。<br><br>在下面的例子中，MySQL可以使用ref联接来处理ref_tables：<br><br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;ref_table&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;key_column</span><span style="color: #808080;">=</span><span style="color: #000000;">expr;<br><br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;ref_table,other_table<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;ref_table.key_column</span><span style="color: #808080;">=</span><span style="color: #000000;">other_table.</span><span style="color: #0000ff;">column</span><span style="color: #000000;">;<br><br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;ref_table,other_table<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;ref_table.key_column_part1</span><span style="color: #808080;">=</span><span style="color: #000000;">other_table.</span><span style="color: #0000ff;">column</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">AND</span><span style="color: #000000;">&nbsp;ref_table.key_column_part2</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;<br><br>例如:<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">drop</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;idx_t3_id&nbsp;</span><span style="color: #0000ff;">on</span><span style="color: #000000;">&nbsp;t3;<br>Query&nbsp;OK,&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;rows&nbsp;affected&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.03</span><span style="color: #000000;">&nbsp;sec)<br>Records:&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;&nbsp;Duplicates:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">&nbsp;&nbsp;Warnings:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;"><br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;idx_t3_id&nbsp;</span><span style="color: #0000ff;">on</span><span style="color: #000000;">&nbsp;t3(id)&nbsp;;<br>Query&nbsp;OK,&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;rows&nbsp;affected&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.04</span><span style="color: #000000;">&nbsp;sec)<br>Records:&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;&nbsp;Duplicates:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">&nbsp;&nbsp;Warnings:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;"><br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3,t4&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;t3.id</span><span style="color: #808080;">=</span><span style="color: #000000;">t4.accountid;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t4&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1000</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;dbatest.t4.accountid&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+------+-------------------+-----------+---------+----------------------+------+-------+</span><span style="color: #008080;"><br></span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.00</span><span style="color: #000000;">&nbsp;sec)<br><br>(</span><span style="color: #800000; font-weight: bold;">5</span><span style="color: #000000;">).&nbsp;&nbsp;ref_or_null<br><br>该联接类型如同ref，但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。<br><br>在下面的例子中，MySQL可以使用ref_or_null联接来处理ref_tables：<br><br></span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;ref_table<br></span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;key_column</span><span style="color: #808080;">=</span><span style="color: #000000;">expr&nbsp;</span><span style="color: #808080;">OR</span><span style="color: #000000;">&nbsp;key_column&nbsp;</span><span style="color: #0000ff;">IS</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">;<br><br>(</span><span style="color: #800000; font-weight: bold;">6</span><span style="color: #000000;">).&nbsp;index_merge<br><br>该联接类型表示使用了索引合并优化方法。在这种情况下，key列包含了使用的索引的清单，key_len包含了使用的索引的最长的关键元素。<br><br>例如:<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t4&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">or</span><span style="color: #000000;">&nbsp;accountid</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">31754306</span><span style="color: #000000;">&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t4&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;index_merge&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_t4_id,idx_t4_accountid&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_t4_id,idx_t4_accountid&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">,</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">union</span><span style="color: #000000;">(idx_t4_id,idx_t4_accountid);&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+</span><span style="color: #008080;"><br></span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;row&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.00</span><span style="color: #000000;">&nbsp;sec)<br><br>(</span><span style="color: #800000; font-weight: bold;">7</span><span style="color: #000000;">).&nbsp;unique_subquery<br><br>该类型替换了下面形式的IN子查询的ref：<br><br>value&nbsp;</span><span style="color: #808080;">IN</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;primary_key&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;single_table&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;some_expr)<br>unique_subquery是一个索引查找函数，可以完全替换子查询，效率更高。<br><br>(</span><span style="color: #800000; font-weight: bold;">8</span><span style="color: #000000;">).index_subquery<br><br>该联接类型类似于unique_subquery。可以替换IN子查询，但只适合下列形式的子查询中的非唯一索引：<br><br>value&nbsp;</span><span style="color: #808080;">IN</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;key_column&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;single_table&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;some_expr)<br><br>(</span><span style="color: #800000; font-weight: bold;">9</span><span style="color: #000000;">).range<br><br>只检索给定范围的行，使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。在该类型中ref列为NULL。<br><br>当使用</span><span style="color: #808080;">=</span><span style="color: #000000;">、</span><span style="color: #808080;">&lt;&gt;</span><span style="color: #000000;">、</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">、</span><span style="color: #808080;">&gt;=</span><span style="color: #000000;">、</span><span style="color: #808080;">&lt;</span><span style="color: #000000;">、</span><span style="color: #808080;">&lt;=</span><span style="color: #000000;">、</span><span style="color: #0000ff;">IS</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">、</span><span style="color: #808080;">&lt;=&gt;</span><span style="color: #000000;">、BETWEEN或者IN操作符，用常量比较关键字列时，可以使用range<br><br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;explain&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;t3&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952602</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">or</span><span style="color: #000000;">&nbsp;id</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">3952603</span><span style="color: #000000;">&nbsp;;<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+-----------+---------+------+------+-------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+-----------+---------+------+------+-------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;t3&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;range&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">,idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_t3_id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--+-------------+-------+-------+-------------------+-----------+---------+------+------+-------------+</span><span style="color: #008080;"><br></span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;row&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.02</span><span style="color: #000000;">&nbsp;sec)<br><br>(</span><span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">).</span><span style="color: #0000ff;">index</span><span style="color: #000000;"><br><br>该联接类型与ALL相同，除了只有索引树被扫描。这通常比ALL快，因为索引文件通常比数据文件小。<br><br>当查询只使用作为单索引一部分的列时，MySQL可以使用该联接类型。<br><br>(</span><span style="color: #800000; font-weight: bold;">11</span><span style="color: #000000;">).&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;"><br><br>对于每个来自于先前的表的行组合，进行完整的表扫描。如果表是第一个没标记const的表，这通常不好，并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL，使得行能基于前面的表中的常数值或列值被检索出。<br><br><br></span><span style="color: #800000; font-weight: bold;">5</span><span style="color: #000000;">.possible_keys<br><br>possible_keys列指出MySQL能使用哪个索引在该表中找到行。注意，该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。<br><br>如果该列是NULL，则没有相关的索引。在这种情况下，可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样，创造一个适当的索引并且再次用EXPLAIN检查查询<br><br></span><span style="color: #800000; font-weight: bold;">6</span><span style="color: #000000;">.&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;"><br><br>key列显示MySQL实际决定使用的键（索引）。如果没有选择索引，键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引，在查询中使用FORCE&nbsp;</span><span style="color: #0000ff;">INDEX</span><span style="color: #000000;">、</span><span style="color: #0000ff;">USE</span><span style="color: #000000;">&nbsp;INDEX或者IGNORE&nbsp;</span><span style="color: #0000ff;">INDEX</span><span style="color: #000000;">。<br><br></span><span style="color: #800000; font-weight: bold;">7</span><span style="color: #000000;">.key_len<br><br>key_len列显示MySQL决定使用的键长度。如果键是NULL，则长度为NULL。<br>使用的索引的长度。在不损失精确性的情况下，长度越短越好<br><br></span><span style="color: #800000; font-weight: bold;">8</span><span style="color: #000000;">.&nbsp;ref<br><br>ref列显示使用哪个列或常数与key一起从表中选择行。<br><br></span><span style="color: #800000; font-weight: bold;">9</span><span style="color: #000000;">.&nbsp;rows<br><br>rows列显示MySQL认为它执行查询时必须检查的行数。<br><br></span><span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">.&nbsp;Extra<br><br>该列包含MySQL解决查询的详细信息,下面详细.<br><br>(</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">).</span><span style="color: #0000ff;">Distinct</span><span style="color: #000000;"><br>一旦MYSQL找到了与行相联合匹配的行，就不再搜索了<br><br>(</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">).</span><span style="color: #808080;">Not</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">exists</span><span style="color: #000000;"><br>MYSQL优化了LEFT&nbsp;</span><span style="color: #0000ff;">JOIN</span><span style="color: #000000;">，一旦它找到了匹配LEFT&nbsp;JOIN标准的行，<br><br>就不再搜索了<br><br>(</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">).Range&nbsp;checked&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;each<br><br>Record（</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;map:#）<br>没有找到理想的索引，因此对于从前面表中来的每一个行组合，MYSQL检查使用哪个索引，并用它来从表中返回行。这是使用索引的最慢的连接之一<br><br>(</span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">).Using&nbsp;filesort<br>看到这个的时候，查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行<br><br>(</span><span style="color: #800000; font-weight: bold;">5</span><span style="color: #000000;">).Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;"><br>列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的，这发生在对表的全部的请求列都是同一个索引的部分的时候<br><br>(</span><span style="color: #800000; font-weight: bold;">6</span><span style="color: #000000;">).Using&nbsp;</span><span style="color: #0000ff;">temporary</span><span style="color: #000000;"><br>看到这个的时候，查询需要优化了。这里，MYSQL需要创建一个临时表来存储结果，这通常发生在对不同的列集进行ORDER&nbsp;BY上，而不是GROUP&nbsp;BY上<br><br>(</span><span style="color: #800000; font-weight: bold;">7</span><span style="color: #000000;">).Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;"><br>使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行，并且连接类型ALL或index，这就会发生，或者是查询有问题</span></div>
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-22 11:19 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优化MySQL数据库查询(索引)</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5815.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Mon, 22 Sep 2008 03:18:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5815.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5815.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5815.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5815.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>任何一位数据库程序员都会有这样的体会：高通信量的数据库驱动程序中，一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响，其不仅消耗掉更多的数据库时间，且它将对其他应用组件产生影响。<br><br>　　如同其它学科，优化查询性能很大程度上决定于开发者的直觉。幸运的是，像MySQL这样的数据库自带有一些协助工具。本文简要讨论诸多工具之三种：使用索引，使用EXPLAIN分析查询以及调整MySQL的内部配置。<br><br>　　</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">:&nbsp;使用索引<br><br>　　MySQL允许对数据库表进行索引，以此能迅速查找记录，而无需一开始就扫描整个表，由此显著地加快查询速度。每个表最多可以做到16个索引，此外MySQL还支持多列索引及全文检索。<br><br>　　给表添加一个索引非常简单，只需调用一个CREATE&nbsp;INDEX命令并为索引指定它的域即可。列表A给出了一个例子：<br><br>　　列表&nbsp;A<br><br>　　mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">CREATE</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">INDEX</span><span style="color: #000000;">&nbsp;idx_username&nbsp;</span><span style="color: #0000ff;">ON</span><span style="color: #000000;">&nbsp;users(username);<br>　　Query&nbsp;OK,&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;row&nbsp;affected&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.15</span><span style="color: #000000;">&nbsp;sec)<br>　　Records:&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;Duplicates:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">&nbsp;Warnings:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;"><br><br><br>　　这里，对users表的username域做索引，以确保在<span style="color: red;">WHERE或者HAVING</span>子句中引用这一域的SELECT查询语句运行速度比没有添加索引时要快。通过SHOW&nbsp;INDEX命令可以查看索引已被创建(列表B)。<br><br>　　列表&nbsp;B<br><br>　　mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;SHOW&nbsp;</span><span style="color: #0000ff;">INDEX</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;users;<br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Non_unique&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Key_name&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Seq_in_index&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Column_name&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Collation&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Cardinality&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Sub_part&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Packed&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Null</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Index_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Comment&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;users&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_username&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;username&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;A&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;YES&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;BTREE&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br>　　</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;row&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.00</span><span style="color: #000000;">&nbsp;sec)<br><br><br>　　值得注意的是：索引就像一把双刃剑。对表的每一域做索引通常没有必要，且很可能导致运行速度减慢，因为向表中插入或修改数据时，MySQL不得不每次都为这些额外的工作重新建立索引。另一方面，避免对表的每一域做索引同样不是一个非常好的主意，因为在提高插入记录的速度时，导致查询操作的速度减慢。这就需要找到一个平衡点，比如在设计索引系统时，考虑表的主要功能(数据修复及编辑)不失为一种明智的选择。<br><br>　　</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">:&nbsp;优化查询性能<br><br>　　<span style="color: red;">在分析查询性能时，考虑EXPLAIN关键字同样很管用。</span>EXPLAIN关键字一般放在SELECT查询语句的前面，用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。下面的一个简单例子可以说明(列表C)这一过程：<br><br>　　列表&nbsp;C<br><br>　　mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;EXPLAIN&nbsp;</span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;city.name,&nbsp;city.district&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;city,&nbsp;country&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;city.countrycode&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;country.code&nbsp;</span><span style="color: #808080;">AND</span><span style="color: #000000;">&nbsp;country.code&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">IND</span><span style="color: #ff0000;">'</span><span style="color: #000000;">;<br><br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br><br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;country&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000; background-color: yellow;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;city&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">ALL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold; background-color: yellow;">4079</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br><br><br>　　</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.00</span><span style="color: #000000;">&nbsp;sec)这里查询是基于两个表连接。EXPLAIN关键字描述了MySQL是如何处理连接这两个表。必须清楚的是，当前设计要求MySQL处理的是&nbsp;country表中的一条记录以及city表中的整个4019条记录。这就意味着，还可使用其他的优化技巧改进其查询方法。例如，给city表添加如下索引(列表D)：<br><br>　　列表&nbsp;D<br><br>　　mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">CREATE</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">INDEX</span><span style="color: #000000;">&nbsp;idx_ccode&nbsp;</span><span style="color: #0000ff;">ON</span><span style="color: #000000;">&nbsp;city(countrycode);<br>　　Query&nbsp;OK,&nbsp;</span><span style="color: #800000; font-weight: bold;">4079</span><span style="color: #000000;">&nbsp;rows&nbsp;affected&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.15</span><span style="color: #000000;">&nbsp;sec)<br>　　Records:&nbsp;</span><span style="color: #800000; font-weight: bold;">4079</span><span style="color: #000000;">&nbsp;Duplicates:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">&nbsp;Warnings:&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;"><br><br><br>　　现在，当我们重新使用EXPLAIN关键字进行查询时，我们可以看到一个显著的改进(列表E)：<br><br>　　列表&nbsp;E<br><br>以下是引用片段：<br>　　mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;EXPLAIN&nbsp;</span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;city.name,&nbsp;city.district&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;city,&nbsp;country&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;city.countrycode&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;country.code&nbsp;</span><span style="color: #808080;">AND</span><span style="color: #000000;">&nbsp;country.code&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">IND</span><span style="color: #ff0000;">'</span><span style="color: #000000;">;<br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;id&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;select_type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;type&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;possible_keys&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">key</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;key_len&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Extra&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;country&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br>　　</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;SIMPLE&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;city&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;ref&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_ccode&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;idx_ccode&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;const&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">333</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;Using&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br>　　</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">&nbsp;rows&nbsp;</span><span style="color: #808080;">in</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">0.01</span><span style="color: #000000;">&nbsp;sec)<br><br><br>　　在这个例子中，MySQL现在只需要扫描city表中的333条记录就可产生一个结果集，其扫描记录数几乎减少了90</span><span style="color: #808080;">%</span><span style="color: #000000;">!自然，数据库资源的查询速度更快，效率更高。<br><br><br></span></div>
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-22 11:18 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> MySQL查询优化程序</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5813.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Mon, 22 Sep 2008 02:17:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5813.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5813.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5813.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5813.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"></span></div>
&nbsp;&nbsp;&nbsp; 在发布一个选择行的查询时，
MySQL进行分析，看是否能够对它进行优化，使它执行更快。本文我们将研究查询优化程序怎样工作。更详细的信息，可参阅MySQL参考指南中的
&#8220;Getting Maximum Performance from
MySQL&#8221;，本文描述了MySQL采用的各种优化措施。（http://www.mysql.com/ 处的MySQL联机参考指南在不断地更新。）
<br><br>&nbsp;&nbsp;&nbsp; MySQL查询优化程序利用了索引。当然，它也利用了其他信息。例如，如果发布下列查询，MySQL将非常快地执行它，不管相应的表有多大：
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">SELECT * FROM tb1_name WHERE 1= 0 <img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"></div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 在此情形中，MySQL考察WHERE 子句，如果认识到不可能有满足该查询的行，就不会对该表进行搜索。可利用EXPLAIN
语句知道这一点，EXPLAIN 语句要求MySQL显示某些有关它应该执行一条SELECT 查询，而实际没有执行的信息。为了使用E X P L
A I N，只需要SELECT 语句前放置EXPLAIN 即可，如下所示： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">EXPLAIN SELECT * FROM tb1_name WHERE 1= 0 </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 通常，EXPLAIN 返回的信息比这个多，包括将用来扫描表的索引、将要使用的连接类型以及需要在每个表中扫描的行数估计等等。 <br><br>&nbsp;&nbsp;&nbsp; <strong> 优化程序怎样工作</strong>  <br><br>&nbsp;&nbsp;&nbsp;
MySQL查询优化程序有几个目标，但其主要目标是尽量利用索引，而且尽量使用最具有限制性的索引以排除尽可能多的行。这样做可能会适得其反，因为发布一
条SELECT
语句的目的是寻找行，而不是拒绝它们。优化程序这样工作的原因是从要考虑的行中排除行越快，那么找到确实符合给出标准的行就越快。如果能够首先进行最具限
制性的测试，则查询可以进行得更快。假如有一个测试两列的查询，每列上都有一个索引： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE coll = "some value" AND col2 = "some other value" </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 还假定，与col1上的测试相符的有900 行，与col2 上的测试相符的有300 行，而两个测试都通过的有30
行。如果首先测试c o l 1，必须检查900 行以找到也与col2 值相符的30 行。那么测试中有870 将失败。如果首先测试c o l
2，要找到也与col1值相符的30 行，只需检查300 行。测试中有失败270 次，这样所涉及的计算较少，磁盘I/O
也较少。<span style="color: red;">遵循下列准则，有助于优化程序利用索引</span>： <br><br>&nbsp;&nbsp;&nbsp; <span style="color: red;">1
,比较具有相同类型的列。</span>在比较中利用索引列时，应该使用那些类型相同的列。例如，CHAR(10) 被视为与CHAR(10)
或VARCHAR(10) 相同，但不同于CHAR(12) 和VARCHAR( 12 )。INT 与BIGINT 不同。在MySQL3.23
版以前，要求使用相同类型的列，否则列上的索引将不起作用。自3.23
版后，不严格要求这样做，但相同的列类型比不同类型提供更好的性能。如果所比较的两列类型不同，可使用ALTER
TABLE语句修改其中之一使它们的类型相配。 <br><br>&nbsp;&nbsp;&nbsp; <span style="color: red;">2,
比较中应尽量使索引列独立</span>。如果在<span style="color: red;">函数调用或算术表达式中使用一个列，则MySQL不能使用这样的索引</span>，因为它必须对每行计算表达式的值。有时，这是不可
避免的，但很多时候，可以重新编写只取索引列本身的查询。下面的WHERE 子句说明了怎样进行这项工作。第一行中，优化程序将简化表达式4/2
为值2，然后使用my_col 上的索引快速地找到小于2 的值。而在第二个表达式中，MySQL必须检索出每行的my_col
值，乘以2，然后将结果与4 比较。没索引可用，因为列中的每个值都要检索，以便能对左边的表达式求值： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE my_col &lt; 4/2<br><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE my_col * 2 &lt; 4 </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 让我们考虑另一个例子。假如有一个索引列date _ c o l。如果发布如下的查询，<span style="color: red;">相应的索引未被使用</span>： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"><span style="color: red;">SELECT * FROM my_tb1WHERE YEAR(date_col) &lt; 1990</span> </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 其中表达式并不将索引列与1990 比较，而是将从列值计算出的值用于比较，而且必须计算每行的这个值。结果是， date_col 上的索引不可能得到使用。怎样解决？使用一个文字日期即可，这时将会使用date_col 上的索引： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE date_col &lt; "1990-01-01" </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 但是假如没有特定的日期值，那么可能会对找到具有出现在距今一定天数内的日期的记录感兴趣。有几种方法来编写这样的查询，但并非所有方法都很好。三种可能的方法如下:&nbsp;</p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">where TO_DAYS(date_col) -TO_DAYS(cunnent_date)&lt;cutoff.<br><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"> where TO_DAYS(date_col) &lt;cutoff+TO_DAYS(cunnent_date)<br><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"> where date_col&lt;DATE_ADD(cunnent_date,INTERVL cutoff DAY)</div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 其中第一行不能利用索引， 因为必须为每行检索列， 以便能够计算TO _ DAYS(date_col) 的值。第二行要好一些。c
ut o ff 和TO _ DAY S ( CURRENT _ DATE)
两者都是常量，因此比较表达式的右边可在查询处理前由优化程序一次计算出来，而不是每行计算一次。但date_col
列仍然出现在一个函数调用中，因此，没有使用索引。<span style="color: red;">第三行是最好的方法</span>。比较表达式的右边可在执行查询前作为常量一次计算出来，但现在其值是一个日期。这
个值可直接与date_col 的值进行比较，不再需要转换为天数，<span style="color: red;">可以利用索引。 </span><br><br>&nbsp;&nbsp;&nbsp; ■ 在LIKE 模式的起始处不要使用通配符。有时，有的人会用下列形式的WHERE 子句来搜索串： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE col_name LIKE "%string%" </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 如果希望找到s t r i n g，不管它出现在列中任何位置，那么这样做是对的。但不要出于习惯在串的两边加&#8220;
%&#8221;。如果实际要查找的只是出现在列的开始处的串，则不应该要第一个&#8220;%&#8221;号。例如，如果在一个包含姓的列中查找&#8220; M a
c&#8221;起始的姓，应该编写如下的WHERE 子句： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE last_name LIKE "Mac%" </div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 优化程序考虑模式中的开始的文字部分，然后利用索引找到相符合的行。不过宁可写成如下的表达式，它允许使用last_name 上的索引： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">WHERE last_name &gt;= "Mac" AND last_name &lt; "Mad"<br><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"></div>
<span style="color: red;">(这个写法比上面还好些)</span><br></pre>
</div>
&nbsp;&nbsp;&nbsp; 这种优化对使用REGEXP 操作符的模式匹配不起作用。 <br><br>&nbsp;&nbsp;&nbsp; ■
帮助优化程序更好地评估索引的有效性。缺省时，如果将索引列中的值与常量进行比较，优化程序将假定键字是均匀地分布在索引中的。优化程序还将对索引进行一
个快速的检查，以估计在确定相应的索引是否应该用于常量的比较时要使用多少条目。可利用myisamchk 或isamchk 的--analyze
选项给优化程序提供更好的信息，以便分析键值的分布。myisamchk 用于MyISAM 表，isamchk 用于ISAM
表。为了完成键值分析，必须能够登录到MySQL服务器主机中，而且必须对表文件具有写访问权限。 <br><br>&nbsp;&nbsp;&nbsp; ■ 利用EXPLAIN
检验优化程序操作。检查用于查询中的索引是否能很快地排除行。如果不能，那么应该试一下利用STRAIGHT_JOIN
强制按特定次序使用表来完成一个连接。查询的执行方式不那么显然；MySQL可能会有很多理由不以您认为最好的次序使用索引。 <br><br>&nbsp;&nbsp;&nbsp;
■
测试查询的其他形式，而且不止一次地运行它们。在测试一个查询的其他形式时，应该每种方法运行几次。如果对两个不同方法中的每种只运行查询一次，通常会发
现第二个查询更快，因为来自第一个查询的信息在磁盘高速缓存中，不需要实际从磁盘上读出。还应该尽量在系统负载相对平稳的时候运行查询，以避免受系统中其
他活动的影响。
<br> <strong> 忽略优化 <br></strong> <br>&nbsp;&nbsp;&nbsp; 这可能听起来有点奇怪，但在以下情况中，要废除MySQL的优化功能： <br><br>&nbsp;&nbsp;&nbsp; 强迫MySQL慢慢地删除表的内容。在需要完全删空一个表时，利用无WHERE 子句的DELETE 语句删除整个表的内容是最快的，如下所示：
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">DELETE FROM tb1_name </div>
<br></pre>
</div>
&nbsp;&nbsp;&nbsp; MySQL对这种特殊情况的DELETE 进行优化；它利用表信息文件中的表说明从头开始创建空数据文件和索引文件。这种优化使DELETE 操作极快，因为MySQL无需单独地删除每一行。但在某些情况下，这样做会产生一些不必要的负作用： <br><br>&nbsp;&nbsp;&nbsp; ■ MySQL报告所涉及的行数为零，即使表不为空也是如此。很多时候这没有关系（虽然，如果事先没有思想准备，会感到困惑不解），但对于那些确实需要知道真实行数的应用程序来说，这是不恰当的。 <br>&nbsp;&nbsp;&nbsp;
■ 如果表含有一个AUTO_INCREMENT 列，则该列的顺序编号会以1从头开始。这是真实的事情，即使在MySQL3.23
中对AUTO_INCREMENT 的处理进行了改进后也是这样。关于这个改进的介绍请参阅第2章中的&#8220;使用序列&#8221;小节。可增加WHERE 1&gt;
0 子句对DELETE 语句&#8220;不优化&#8221;。
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">DELETE FROM tb1_name WHERE 1&gt; 0 <img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"></div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 这迫使MySQL进行逐行的删除。相应的查询执行要慢得多，但将返回真正删除的行数。它还将保持当前的AUTO_INCREMENT 序列的编号，不过只对MyISAM 表（MySQL3.23 以上的版本可用）有效。而对于ISAM 表，序列仍将重置。&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; ■ 避免更新循环不终止。如果更新一个索引列，如果该列用于WHERE 子句且更新将索引值移入至今尚未出超的取值范围内时，有可能对所更新的行进行不终止的更新。假如表my_tbl 有一个索引了的整数列key _ c o l。下列的查询会产生问题：</p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">update my_tbl  set  key_col=key_col+1 where key_col&gt;0</div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 这个问题的解决方法是在WHERE 子句中将key_col 用于一个表达式，使MySQL不能使用索引： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">update my_tbl  set  key_col=key_col+1 where key_col+0&gt;0</div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 实际上，还有另外的方法，即升级到MySQL3.23.2 或更高的版本，它们已经解决了这样的问题。 <br><br>&nbsp;&nbsp;&nbsp;
以随机次序检索结果。自MySQL3.23.3 以来，可使用ORDER BY RAND( )
随机地对结果进行排序。另一技术对MySQL更旧的版本很有用处，那就是选择一个随机数列，然后在该列上进行排序。但是，如果按如下编写查询，优化程序将
会让您的愿望落空：</p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top"> select ...,RAND( )  as rand_col from ... order by  rand_col</div>
<br></pre>
</div>
<p>&nbsp;&nbsp;&nbsp; 这里的问题是MySQL认为该列是一个函数调用，将认为相应的列值是一个常数，而对ORDER BY 子句进行优化，使此查询失效。可在表达式中引用某个表列来蒙骗优化程序。例如，如果表中有一个名为age 的列，可编写如下查询： </p>
<div style="overflow: auto; width: 500px;">
<pre style="border: 1px solid black; padding: 4px; background-color: #ededed;">
<div><!--
code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><img src="http://219.232.114.72/Images/OutliningIndicators/None.gif" alt="" align="top">select ...,age*0+RAND( )  as rand_col from ... order by  rand_col</div>
<br></pre>
</div>
&nbsp;&nbsp;&nbsp; 忽略优化程序的表连接次序。可利用STRIGHT_JOIN
强迫优化程序以特定的次序使用表。如果这样做，应该规定表的次序，使第一个表为从中选择的行数最少的表。（如果不能肯定哪个表满足这个要求，可将行数最多
的表作为第一个表。）换句话说，应尽量规定表的次序，使最有限制性的选择先出现。排除可能的候选行越早，查询执行得就越快。要保证测试相应的查询两次；可
能会有某些原因使优化程序不以您所想像的方式对表进行连接，并且STRAIGHT_JOIN 也可能实际上不起作用。
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-22 10:17 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql全文索引</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5812.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Mon, 22 Sep 2008 01:37:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5812.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5812.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5812.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5812.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">MYSQL的一个很有用的特性是使用全文索引(FULLTEXT&nbsp;</span><span style="color: #0000ff;">index</span><span style="color: #000000;">)查找文本的能力.目前只有使用MyISAM类型表的时候有效(MyISAM是默认的表类型,如果你不知道使用的是什么类型的表,那很可能就是&nbsp;MyISAM).全文索引可以建立在TEXT,CHAR或者VARCHAR类型的字段,或者字段组合上.我们将建立一个简单的表用来解释各种特性.<br>简单用法(MATCH()函数)对3.23.23以后的版本有效,复杂的用法(</span><span style="color: #808080;">IN</span><span style="color: #000000;">&nbsp;BOOLEAN&nbsp;MODE修饰语)对4以后的版本有效,本文的第一部分着重简单用法,第二部分讲复杂用法.<br>一个简单的表<br>我们将在整个过程中使用下面的表.<br></span><span style="color: #0000ff;">CREATE</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;fulltext_sample(copy&nbsp;</span><span style="color: #000000; font-weight: bold;">TEXT</span><span style="color: #000000;">,FULLTEXT(copy))&nbsp;TYPE</span><span style="color: #808080;">=</span><span style="color: #000000;">MyISAM;<br>如果你没有把默认的表类型设置成MyISAM以外的类型那么TYPE</span><span style="color: #808080;">=</span><span style="color: #000000;">MyISAM可以省略.建表之后,向其中填充一些数据,例如:<br></span><span style="color: #0000ff;">INSERT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">INTO</span><span style="color: #000000;">&nbsp;fulltext_sample&nbsp;</span><span style="color: #0000ff;">VALUES</span><span style="color: #000000;"><br>(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">It&nbsp;appears&nbsp;good&nbsp;from&nbsp;here</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br>(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">The&nbsp;here&nbsp;and&nbsp;the&nbsp;past</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br>(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Why&nbsp;are&nbsp;we&nbsp;hear</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br>(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">An&nbsp;all-out&nbsp;alert</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br>(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">All&nbsp;you&nbsp;need&nbsp;is&nbsp;love</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br>(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">A&nbsp;good&nbsp;alert</span><span style="color: #ff0000;">'</span><span style="color: #000000;">);<br>如果你已经建立好了一个表,你可以使用ALTER&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">(就像CREATE&nbsp;INDEX语句一样)语句添加一个全文索引,例如:<br></span><span style="color: #0000ff;">ALTER</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;fulltext_sample&nbsp;</span><span style="color: #0000ff;">ADD</span><span style="color: #000000;">&nbsp;FULLTEXT(copy)<br>查找文本<br>全文索引搜索的语法很简单,你只要MATCH字段,AGAINST你要查找的文本,例如:<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;fulltext_sample&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">love</span><span style="color: #ff0000;">'</span><span style="color: #000000;">);<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;copy&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">All</span><span style="color: #000000;">&nbsp;you&nbsp;need&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;love&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--------------------+</span><span style="color: #008080;"><br></span><span style="color: #000000;">在全文索引上进行搜索是不区分大小写的,因此下面的语句也可以正常运行:<br>mysql</span><span style="color: #808080;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">SELECT</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">FROM</span><span style="color: #000000;">&nbsp;fulltext_sample&nbsp;</span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;">&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">LOVE</span><span style="color: #ff0000;">'</span><span style="color: #000000;">);<br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;copy&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--------------------+</span><span style="color: #008080;"><br></span><span style="color: #808080;">|</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">All</span><span style="color: #000000;">&nbsp;you&nbsp;need&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;love&nbsp;</span><span style="color: #808080;">|</span><span style="color: #000000;"><br></span><span style="color: #808080;">+</span><span style="color: #008080;">--</span><span style="color: #008080;">--------------------+</span><span style="color: #008080;"><br></span><span style="color: #000000;">全文索引通常用来搜索自然语言文本,例如报纸文章,网页内容等等.因此MySQL为这类搜索添加了很多特性.MySQL不索引任何长度小于等于3的文本,&nbsp;也不索引有50</span><span style="color: #808080;">%</span><span style="color: #000000;">机会出现的单词.这意味着如果你的表少于2条记录,基于全文索引的搜索不会返回任何东西.将来,MySQL会使这项功能更灵活,但是现在它应该可以适合大部分自然语言的使用.如果你的数据库中的大部分记录都包含&#8221;music&#8221;,你很可能不希望返回这些记录,你可以使用IN&nbsp;BOOLEAN&nbsp;MODE修饰符来获得50</span><span style="color: #808080;">%</span><span style="color: #000000;">左右的阀值,见本文第二部分.<br>结果将按照关联性从高到底的顺序返回.<br><br><br>主要特性<br>下面是标准的全文索引搜索的主要特性:<br></span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">.排除重复词语<br></span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">.排除长度小于4的词语<br></span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">.排除在多于一半记录中出现的词语(就是说只要要有3条记录)<br></span><span style="color: #800000; font-weight: bold;">4</span><span style="color: #000000;">.带连字符的词语被认为两个词语<br></span><span style="color: #800000; font-weight: bold;">5</span><span style="color: #000000;">.结果按照关联度降序返回<br></span><span style="color: #800000; font-weight: bold;">6</span><span style="color: #000000;">.忽略列表中的词语也被从搜索结果中排除.忽略列表基于普通的英文单词,因此如果你的数据用作不同的目的,你可能希望改变忽略列表.不幸的是,这样作并不容易.你需要编辑文件myisam</span><span style="color: #808080;">/</span><span style="color: #000000;">ft_static.c,重新编辑MySQL,并重建索引!这里有一个忽略列表.注意,这些在不同的版本里有所更改.<br>忽略列表<br>"a",&nbsp;"a</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"able",&nbsp;"about",&nbsp;"above",&nbsp;"according",&nbsp;"accordingly",&nbsp;"across",&nbsp;"actually",&nbsp;"after",&nbsp;"afterwards",&nbsp;"again",&nbsp;"against",&nbsp;"ain</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"</span><span style="color: #808080;">all</span><span style="color: #000000;">",&nbsp;"allow",&nbsp;"allows",&nbsp;"almost",&nbsp;"alone",&nbsp;"along",&nbsp;"already",&nbsp;"also",&nbsp;"although",&nbsp;"always",&nbsp;"am",&nbsp;"among",&nbsp;"amongst",&nbsp;"an",&nbsp;"</span><span style="color: #808080;">and</span><span style="color: #000000;">",&nbsp;"another",&nbsp;"</span><span style="color: #808080;">any</span><span style="color: #000000;">",&nbsp;"anybody",&nbsp;"anyhow",&nbsp;"anyone",&nbsp;"anything",&nbsp;"anyway",&nbsp;"anyways",&nbsp;"anywhere",&nbsp;"apart",&nbsp;"appear",&nbsp;"appreciate",&nbsp;"appropriate",&nbsp;"are",&nbsp;"aren</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"around",&nbsp;"as",&nbsp;"aside",&nbsp;"ask",&nbsp;"asking",&nbsp;"associated",&nbsp;"at",&nbsp;"available",&nbsp;"away",&nbsp;"awfully",&nbsp;"b",&nbsp;"be",&nbsp;"became",&nbsp;"because",&nbsp;"become",&nbsp;"becomes",&nbsp;"becoming",&nbsp;"been",&nbsp;"before",&nbsp;"beforehand",&nbsp;"behind",&nbsp;"being",&nbsp;"believe",&nbsp;"below",&nbsp;"beside",&nbsp;"besides",&nbsp;"best",&nbsp;"better",&nbsp;"between",&nbsp;"beyond",&nbsp;"both",&nbsp;"brief",&nbsp;"but",&nbsp;"by",&nbsp;"c",&nbsp;"c</span><span style="color: #ff0000;">'</span><span style="color: #000000;">mon",&nbsp;"c</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"came",&nbsp;"can",&nbsp;"can</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"cannot",&nbsp;"cant",&nbsp;"cause",&nbsp;"causes",&nbsp;"certain",&nbsp;"certainly",&nbsp;"changes",&nbsp;"clearly",&nbsp;"co",&nbsp;"com",&nbsp;"come",&nbsp;"comes",&nbsp;"concerning",&nbsp;"consequently",&nbsp;"consider",&nbsp;"considering",&nbsp;"contain",&nbsp;"containing",&nbsp;"</span><span style="color: #0000ff;">contains</span><span style="color: #000000;">",&nbsp;"corresponding",&nbsp;"could",&nbsp;"couldn</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"course",&nbsp;"currently",&nbsp;"d",&nbsp;"definitely",&nbsp;"described",&nbsp;"despite",&nbsp;"did",&nbsp;"didn</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"different",&nbsp;"do",&nbsp;"does",&nbsp;"doesn</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"doing",&nbsp;"don</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"done",&nbsp;"down",&nbsp;"downwards",&nbsp;"during",&nbsp;"e",&nbsp;"each",&nbsp;"edu",&nbsp;"eg",&nbsp;"eight",&nbsp;"either",&nbsp;"</span><span style="color: #0000ff;">else</span><span style="color: #000000;">",&nbsp;"elsewhere",&nbsp;"enough",&nbsp;"entirely",&nbsp;"especially",&nbsp;"et",&nbsp;"etc",&nbsp;"even",&nbsp;"ever",&nbsp;"every",&nbsp;"everybody",&nbsp;"everyone",&nbsp;"everything",&nbsp;"everywhere",&nbsp;"ex",&nbsp;"exactly",&nbsp;"example",&nbsp;"</span><span style="color: #0000ff;">except</span><span style="color: #000000;">",&nbsp;"f",&nbsp;"far",&nbsp;"few",&nbsp;"fifth",&nbsp;"first",&nbsp;"five",&nbsp;"followed",&nbsp;"following",&nbsp;"follows",&nbsp;"</span><span style="color: #0000ff;">for</span><span style="color: #000000;">",&nbsp;"former",&nbsp;"formerly",&nbsp;"forth",&nbsp;"four",&nbsp;"</span><span style="color: #0000ff;">from</span><span style="color: #000000;">",&nbsp;"further",&nbsp;"furthermore",&nbsp;"g",&nbsp;"get",&nbsp;"gets",&nbsp;"getting",&nbsp;"given",&nbsp;"gives",&nbsp;"</span><span style="color: #0000ff;">go</span><span style="color: #000000;">",&nbsp;"goes",&nbsp;"going",&nbsp;"gone",&nbsp;"got",&nbsp;"gotten",&nbsp;"greetings",&nbsp;"h",&nbsp;"had",&nbsp;"hadn</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"happens",&nbsp;"hardly",&nbsp;"has",&nbsp;"hasn</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"have",&nbsp;"haven</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"having",&nbsp;"he",&nbsp;"he</span><span style="color: #ff0000;">'</span><span style="color: #000000;">s",&nbsp;"hello",&nbsp;"help",&nbsp;"hence",&nbsp;"her",&nbsp;"here",&nbsp;"here</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"hereafter",&nbsp;"hereby",&nbsp;"herein",&nbsp;"hereupon",&nbsp;"hers",&nbsp;"herself",&nbsp;"hi",&nbsp;"him",&nbsp;"himself",&nbsp;"his",&nbsp;"hither",&nbsp;"hopefully",&nbsp;"how",&nbsp;"howbeit",&nbsp;"however",&nbsp;"i",&nbsp;"i</span><span style="color: #ff0000;">'</span><span style="color: #000000;">d",&nbsp;"i</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ll",&nbsp;"i</span><span style="color: #ff0000;">'</span><span style="color: #000000;">m",&nbsp;"i</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ve",&nbsp;"ie",&nbsp;"if",&nbsp;"ignored",&nbsp;"immediate",&nbsp;"in",&nbsp;"inasmuch",&nbsp;"inc",&nbsp;"indeed",&nbsp;"indicate",&nbsp;"indicated",&nbsp;"indicates",&nbsp;"inner",&nbsp;"insofar",&nbsp;"instead",&nbsp;"into",&nbsp;"inward",&nbsp;"is",&nbsp;"isn</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"it",&nbsp;"it</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d",&nbsp;"it</span><span style="color: #ff0000;">'</span><span style="color: #000000;">ll",&nbsp;"it</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"its",&nbsp;"itself",&nbsp;"j",&nbsp;"just",&nbsp;"k",&nbsp;"keep",&nbsp;"keeps",&nbsp;"kept",&nbsp;"know",&nbsp;"knows",&nbsp;"known",&nbsp;"l",&nbsp;"last",&nbsp;"lately",&nbsp;"later",&nbsp;"latter",&nbsp;"latterly",&nbsp;"least",&nbsp;"less",&nbsp;"lest",&nbsp;"let",&nbsp;"let</span><span style="color: #ff0000;">'</span><span style="color: #000000;">s",&nbsp;"</span><span style="color: #808080;">like</span><span style="color: #000000;">",&nbsp;"liked",&nbsp;"likely",&nbsp;"little",&nbsp;"look",&nbsp;"looking",&nbsp;"looks",&nbsp;"ltd",&nbsp;"m",&nbsp;"mainly",&nbsp;"many",&nbsp;"may",&nbsp;"maybe",&nbsp;"me",&nbsp;"mean",&nbsp;"meanwhile",&nbsp;"merely",&nbsp;"might",&nbsp;"more",&nbsp;"moreover",&nbsp;"most",&nbsp;"mostly",&nbsp;"much",&nbsp;"must",&nbsp;"my",&nbsp;"myself",&nbsp;"n",&nbsp;"name",&nbsp;"namely",&nbsp;"nd",&nbsp;"near",&nbsp;"nearly",&nbsp;"necessary",&nbsp;"need",&nbsp;"needs",&nbsp;"neither",&nbsp;"never",&nbsp;"nevertheless",&nbsp;"new",&nbsp;"</span><span style="color: #0000ff;">next</span><span style="color: #000000;">",&nbsp;"nine",&nbsp;"no",&nbsp;"nobody",&nbsp;"non",&nbsp;"none",&nbsp;"noone",&nbsp;"nor",&nbsp;"normally",&nbsp;"</span><span style="color: #808080;">not</span><span style="color: #000000;">",&nbsp;"nothing",&nbsp;"novel",&nbsp;"now",&nbsp;"nowhere",&nbsp;"o",&nbsp;"obviously",&nbsp;"</span><span style="color: #0000ff;">of</span><span style="color: #000000;">",&nbsp;"</span><span style="color: #0000ff;">off</span><span style="color: #000000;">",&nbsp;"often",&nbsp;"oh",&nbsp;"ok",&nbsp;"okay",&nbsp;"old",&nbsp;"</span><span style="color: #0000ff;">on</span><span style="color: #000000;">",&nbsp;"</span><span style="color: #0000ff;">once</span><span style="color: #000000;">",&nbsp;"one",&nbsp;"ones",&nbsp;"</span><span style="color: #0000ff;">only</span><span style="color: #000000;">",&nbsp;"onto",&nbsp;"</span><span style="color: #808080;">or</span><span style="color: #000000;">",&nbsp;"other",&nbsp;"others",&nbsp;"otherwise",&nbsp;"ought",&nbsp;"our",&nbsp;"ours",&nbsp;"ourselves",&nbsp;"out",&nbsp;"outside",&nbsp;"</span><span style="color: #0000ff;">over</span><span style="color: #000000;">",&nbsp;"overall",&nbsp;"own",&nbsp;"p",&nbsp;"particular",&nbsp;"particularly",&nbsp;"per",&nbsp;"perhaps",&nbsp;"placed",&nbsp;"please",&nbsp;"plus",&nbsp;"possible",&nbsp;"presumably",&nbsp;"probably",&nbsp;"provides",&nbsp;"q",&nbsp;"que",&nbsp;"quite",&nbsp;"qv",&nbsp;"r",&nbsp;"rather",&nbsp;"rd",&nbsp;"re",&nbsp;"really",&nbsp;"reasonably",&nbsp;"regarding",&nbsp;"regardless",&nbsp;"regards",&nbsp;"relatively",&nbsp;"respectively",&nbsp;"</span><span style="color: #ff00ff;">right</span><span style="color: #000000;">",&nbsp;"s",&nbsp;"said",&nbsp;"same",&nbsp;"saw",&nbsp;"say",&nbsp;"saying",&nbsp;"says",&nbsp;"second",&nbsp;"secondly",&nbsp;"see",&nbsp;"seeing",&nbsp;"seem",&nbsp;"seemed",&nbsp;"seeming",&nbsp;"seems",&nbsp;"seen",&nbsp;"self",&nbsp;"selves",&nbsp;"sensible",&nbsp;"sent",&nbsp;"serious",&nbsp;"seriously",&nbsp;"seven",&nbsp;"several",&nbsp;"shall",&nbsp;"she",&nbsp;"should",&nbsp;"shouldn</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"since",&nbsp;"six",&nbsp;"so",&nbsp;"some",&nbsp;"somebody",&nbsp;"somehow",&nbsp;"someone",&nbsp;"something",&nbsp;"sometime",&nbsp;"sometimes",&nbsp;"somewhat",&nbsp;"somewhere",&nbsp;"soon",&nbsp;"sorry",&nbsp;"specified",&nbsp;"specify",&nbsp;"specifying",&nbsp;"still",&nbsp;"sub",&nbsp;"such",&nbsp;"sup",&nbsp;"sure",&nbsp;"t",&nbsp;"t</span><span style="color: #ff0000;">'</span><span style="color: #000000;">s",&nbsp;"take",&nbsp;"taken",&nbsp;"tell",&nbsp;"tends",&nbsp;"th",&nbsp;"than",&nbsp;"thank",&nbsp;"thanks",&nbsp;"thanx",&nbsp;"that",&nbsp;"that</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"thats",&nbsp;"the",&nbsp;"their",&nbsp;"theirs",&nbsp;"them",&nbsp;"themselves",&nbsp;"then",&nbsp;"thence",&nbsp;"there",&nbsp;"there</span><span style="color: #ff0000;">'</span><span style="color: #000000;">s",&nbsp;"thereafter",&nbsp;"thereby",&nbsp;"therefore",&nbsp;"therein",&nbsp;"theres",&nbsp;"thereupon",&nbsp;"these",&nbsp;"they",&nbsp;"they</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d",&nbsp;"they</span><span style="color: #ff0000;">'</span><span style="color: #000000;">ll",&nbsp;"they</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">re",&nbsp;"they</span><span style="color: #ff0000;">'</span><span style="color: #000000;">ve",&nbsp;"think",&nbsp;"third",&nbsp;"this",&nbsp;"thorough",&nbsp;"thoroughly",&nbsp;"those",&nbsp;"though",&nbsp;"three",&nbsp;"through",&nbsp;"throughout",&nbsp;"thru",&nbsp;"thus",&nbsp;"</span><span style="color: #0000ff;">to</span><span style="color: #000000;">",&nbsp;"together",&nbsp;"too",&nbsp;"took",&nbsp;"toward",&nbsp;"towards",&nbsp;"tried",&nbsp;"tries",&nbsp;"truly",&nbsp;"try",&nbsp;"trying",&nbsp;"twice",&nbsp;"two",&nbsp;"u",&nbsp;"un",&nbsp;"under",&nbsp;"unfortunately",&nbsp;"unless",&nbsp;"unlikely",&nbsp;"until",&nbsp;"unto",&nbsp;"up",&nbsp;"upon",&nbsp;"us",&nbsp;"</span><span style="color: #0000ff;">use</span><span style="color: #000000;">",&nbsp;"used",&nbsp;"useful",&nbsp;"uses",&nbsp;"using",&nbsp;"usually",&nbsp;"v",&nbsp;"value",&nbsp;"various",&nbsp;"very",&nbsp;"via",&nbsp;"viz",&nbsp;"vs",&nbsp;"w",&nbsp;"want",&nbsp;"wants",&nbsp;"was",&nbsp;"wasn</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"way",&nbsp;"we",&nbsp;"we</span><span style="color: #ff0000;">'</span><span style="color: #000000;">d",&nbsp;"we</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ll",&nbsp;"we</span><span style="color: #ff0000;">'</span><span style="color: #000000;">re",&nbsp;"we</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ve",&nbsp;"welcome",&nbsp;"well",&nbsp;"went",&nbsp;"were",&nbsp;"weren</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"what",&nbsp;"what</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"whatever",&nbsp;"when",&nbsp;"whence",&nbsp;"whenever",&nbsp;"where",&nbsp;"where</span><span style="color: #ff0000;">'</span><span style="color: #000000;">s",&nbsp;"whereafter",&nbsp;"whereas",&nbsp;"whereby",&nbsp;"wherein",&nbsp;"whereupon",&nbsp;"wherever",&nbsp;"whether",&nbsp;"which",&nbsp;"</span><span style="color: #0000ff;">while</span><span style="color: #000000;">",&nbsp;"whither",&nbsp;"who",&nbsp;"who</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">s",&nbsp;"whoever",&nbsp;"whole",&nbsp;"whom",&nbsp;"whose",&nbsp;"why",&nbsp;"will",&nbsp;"willing",&nbsp;"wish",&nbsp;"with",&nbsp;"within",&nbsp;"without",&nbsp;"won</span><span style="color: #ff0000;">'</span><span style="color: #000000;">t",&nbsp;"wonder",&nbsp;"would",&nbsp;"would",&nbsp;"wouldn</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">t",&nbsp;"x",&nbsp;"y",&nbsp;"yes",&nbsp;"yet",&nbsp;"you",&nbsp;"you</span><span style="color: #ff0000;">'</span><span style="color: #000000;">d",&nbsp;"you</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ll",&nbsp;"you</span><span style="color: #ff0000;">'</span><span style="color: #000000;">re",&nbsp;"you</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ve",&nbsp;"your",&nbsp;"yours",&nbsp;"yourself",&nbsp;"yourselves",&nbsp;"z",&nbsp;"zero",<br>让我们看一下其中的一些词.如果你懒的输入,但是想查找&#8221;love&#8221;这个词,象下面这样:<br>mysql&gt;&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;fulltext_sample&nbsp;WHERE&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #000000;">lov</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">);<br>Empty&nbsp;set&nbsp;(0.00&nbsp;sec)<br>什么都没返回,因为全文索引只包含完整的单词,不是部分单词.如果想得到返回,你必须把单词写完整,就像第一个例子里一样.<br>就像我们提过的,连字符单词在全文索引中被排除(它们被作为单独的单词索引),因此下面的语句什么都不返回:<br>mysql&gt;&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;fulltext_sample&nbsp;WHERE&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #808080;">all-</span><span style="color: #000000;">out</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">);<br>Empty&nbsp;set&nbsp;(0.00&nbsp;sec)<br>很不幸,两个单词都小于4个字符,因此单独搜索时也不会出现,而且通常的搜索中也不会出现.本文的第二部分中使用BOOLEAN&nbsp;MODE搜索可以搜索部分的或者包含连字符的单词.<br>你也可以一次搜索多个单词,用逗号分隔.下面的例子查找包含&#8221;here&#8221;和&#8221;appears&#8221;的记录:<br>mysql&gt;&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;fulltext_sample&nbsp;WHERE&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #000000;">here</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">'</span><span style="color: #000000;">appears</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">);<br>Empty&nbsp;set&nbsp;(0.01&nbsp;sec)<br>出乎意料这个语句没有返回.但是仔细看看忽略列表,这个词被列在其中,因此被从索引中排除了.忽略列表可能是人们解释MySQL全文索引没有生效的通常原因.如果你的查询返回了一个结果,那么你的版本的MySQL的忽略列表不包含&#8221;here&#8221;这个词.<br>关联度<br>下面的例子说明记录返回的优先级<br>mysql&gt;&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;fulltext_sample&nbsp;WHERE&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #000000;">good,alert</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">);<br>+---------------------------+<br>|&nbsp;copy&nbsp;|<br>+---------------------------+<br>|&nbsp;A&nbsp;good&nbsp;alert&nbsp;|<br>|&nbsp;It&nbsp;appears&nbsp;good&nbsp;from&nbsp;here&nbsp;|<br>|&nbsp;An&nbsp;all-out&nbsp;alert&nbsp;|<br>+---------------------------+<br>记录&#8221;A&nbsp;good&nbsp;alert&#8221;首先出现,因为它同时包含要搜索的两个词.你不必相信我-只需要看看MySQL在结果中显示的优先级.简单的在字段列表中重复MATCH()函数,例如:<br>mysql&gt;&nbsp;SELECT&nbsp;copy,MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #000000;">good,alert</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">)&nbsp;AS&nbsp;relevance<br>FROM&nbsp;fulltext_sample&nbsp;WHERE&nbsp;MATCH(copy)&nbsp;AGAINST(</span><span style="color: #ff0000;">'</span><span style="color: #000000;">good,alert</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">);<br>+---------------------------+------------------+<br>|&nbsp;copy&nbsp;|&nbsp;relevance&nbsp;|<br>+---------------------------+------------------+<br>|&nbsp;A&nbsp;good&nbsp;alert&nbsp;|&nbsp;1.3551264824316&nbsp;|<br>|&nbsp;An&nbsp;all-out&nbsp;alert&nbsp;|&nbsp;0.68526663197496&nbsp;|<br>|&nbsp;It&nbsp;appears&nbsp;good&nbsp;from&nbsp;hear&nbsp;|&nbsp;0.67003110026735&nbsp;|<br>+---------------------------+------------------+<br>关联度的计算非常复杂,它基于索引中单词的数量,记录中不同单词的个数,索引和返回结果中单词的总数,以及单词的重要程度.这个数字可能在你的MySQL版本中有所不同,MySQL偶尔会强化计算逻辑.<br>对大多数应用来说标准的全文索引搜索非常有用而充分,MySQL&nbsp;4让它更加强大.</span></div>
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-22 09:37 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/22/5812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>meta 详解 （外一篇： 	Meta 标签之详解 html head区域技巧）</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/11/5749.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Thu, 11 Sep 2008 08:38:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/11/5749.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5749.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/11/5749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5749.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5749.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><span style="color: red;">第一篇：meta 详解：</span><br><br>您的个人网站即使做得再精彩，在&#8220;浩瀚如海&#8221;的网络空间中，也如一叶扁舟不易为人发现，如何推广<br><br>个人网站，人们首先想到的方法无外乎以下几种：<br><br>●在搜索引擎中登录自己的个人网站<br><br>●在知名网站加入你个人网站的链接<br><br>●在论坛中发帖子宣传你的个人网站<br><br>很多人却忽视了HTML标签META的强大功效，一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性，有兴趣吗，谁我来重新认识一下META标签吧！<br><br>META标签是HTML语言HEAD区的一个辅助性标签，它位于HTML文档头部的</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">HEAD</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">标记和</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">TITLE</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">标记之间，它提供用户不可见的信息。meta标签通常用来为搜索引擎robots定义页面主题，或者是定义用户浏览器上的cookie；它可以用于鉴别作者，设定页面格式，标注内容提要和关键字；还可以设置页面使其可以根据你定义的时间间隔刷新自己,以及设置RASC内容等级，等等。<br><br>详细介绍<br><br>下面介绍一些有关&nbsp;标记的例子及解释。<br><br>META标签分两大部分：HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。<br><br>★HTTP-EQUIV<br><br>HTTP-EQUIV类似于HTTP的头部协议，它回应给浏览器一些有用的信息，以帮助正确和精确地显示网页内容。常用的HTTP-EQUIV类型有：<br><br>1、Content-Type和Content-Language&nbsp;(显示字符集的设定)<br><br>说明：设定页面使用的字符集，用以说明主页制作所使用的文字已经语言，浏览器会根据此来调用相应的字符集显示page内容。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-Type"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="text/html;&nbsp;Charset=gb2312"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-Language"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="zh-CN"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：该META标签定义了HTML页面所使用的字符集为GB2132，就是国标汉字码。如果将其中的&#8220;charset=GB2312&#8221;替换成&nbsp;&#8220;BIG5&#8221;，则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时，IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面META标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集，则IE就提示下载。其他的语言也对应不同的charset，比如日文的字符集是&#8220;iso-2022-jp&nbsp;&#8221;，韩文的是&#8220;ks_c_5601&#8221;。<br><br>Content-Type的Content还可以是：text/xml等文档类型；<br><br>Charset&nbsp;选项：ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-&nbsp;Jis、Euc、Koi8-2、us-ascii,&nbsp;x-mac-&nbsp;roman,&nbsp;iso-8859-2,&nbsp;x-mac-ce,&nbsp;iso-2022-jp,&nbsp;x-sjis,&nbsp;x-euc-jp,euc-kr,&nbsp;iso-&nbsp;2022-kr,&nbsp;gb2312,&nbsp;gb_2312-80,&nbsp;x-euc-tw,&nbsp;x-cns11643-1,x-cns11643-2等字符集；Content-Language的Content还可以是：EN、FR等语言代码。<br><br>2、Refresh&nbsp;(刷新)<br><br>说明：让网页多长时间（秒）刷新自己，或在多长时间后让网页自动链接到其它网页。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Refresh"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="30"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Refresh"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="5;&nbsp;Url=http://www.downme.com"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：其中的5是指停留5秒钟后自动刷新到URL网址。<br><br>3、Expires&nbsp;(期限)<br><br>说明：指定网页在缓存中的过期时间，一旦网页过期，必须到服务器上重新调阅。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Expires"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="0"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Expires"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="Wed,&nbsp;26&nbsp;Feb&nbsp;1997&nbsp;08:21:57&nbsp;GMT"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：必须使用GMT的时间格式，或直接设为0(数字表示多少时间后过期)。<br><br>4、Pragma&nbsp;(cach模式)<br><br>说明：禁止浏览器从本地机的缓存中调阅页面内容。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Pragma"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="No-cach"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：网页不保存在缓存中，每次访问都刷新页面。这样设定，访问者将无法脱机浏览。<br><br>5、Set-Cookie&nbsp;(cookie设定)<br><br>说明：浏览器访问某个页面时会将它存在缓存中，下次再次访问时就可从缓存中读取，以提高速度。当你希望访问者每次都刷新你广告的图标，或每次都刷新你的计数器，就要禁用缓存了。通常HTML文件没有必要禁用缓存，对于ASP等页面，就可以使用禁用缓存，因为每次看到的页面都是在服务器动态生成的，缓存就失去意义。如果网页过期，那么存盘的cookie将被删除。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Set-Cookie"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="cookievalue=xxx;&nbsp;expires=Wednesday,<br><br>21-Oct-98&nbsp;16:14:21&nbsp;GMT;&nbsp;path=/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：必须使用GMT的时间格式。<br><br>6、Window-target&nbsp;(显示窗口的设定)<br><br>说明：强制页面在当前窗口以独立页面显示。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Widow-target"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="_top"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：这个属性是用来防止别人在框架里调用你的页面。Content选项：_blank、_top、_self、_parent。<br><br>7、Pics-label&nbsp;(网页RSAC等级评定)<br><br>说明：在IE的Internet选项中有一项内容设置，可以防止浏览一些受限制的网站，而网站的限制级<br><br>别就是通过该参数来设置的。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">META&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Pics-label"</span><span style="color: #ff0000;">&nbsp;Contect</span><span style="color: #0000ff;">=<br><br>"(PICS－1.1'http://www.rsac.org/ratingsv01.html'<br><br>I&nbsp;gen&nbsp;comment&nbsp;'RSACi&nbsp;North&nbsp;America&nbsp;Sever'&nbsp;by&nbsp;'inet@microsoft.com'<br><br>for&nbsp;'http://www.microsoft.com'&nbsp;on&nbsp;'1997.06.30T14:21－0500'&nbsp;r(n0&nbsp;s0&nbsp;v0&nbsp;l0))"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置&nbsp;Microsoft&nbsp;Internet&nbsp;Explorer（IE3.0以上）来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自&nbsp;Microsoft的主页。代码中的（n&nbsp;0&nbsp;s&nbsp;0&nbsp;v&nbsp;0&nbsp;l&nbsp;0）表示该站点不包含不健康内容。级别的评定是由RSAC，即美国娱乐委员会的评级机构评定的，如果你想进一步了解RSAC评估系统的等级内容，或者你需要评价自己的网站，可以访问RSAC的站点：http://www.rsac.org/。<br><br>8、Page-Enter、Page-Exit&nbsp;(进入与退出)<br><br>说明：这个是页面被载入和调出时的一些特效。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Page-Enter"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="blendTrans(Duration=0.5)"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Page-Exit"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="blendTrans(Duration=0.5)"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：blendTrans是动态滤镜的一种，产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Page-Enter"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="revealTrans(duration=x,&nbsp;transition=y)"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Page-Exit"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="revealTrans(duration=x,&nbsp;transition=y)"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>Duration表示滤镜特效的持续时间(单位：秒)<br><br>Transition滤镜类型。表示使用哪种特效，取值为0-23。<br><br>0&nbsp;矩形缩小<br><br>1&nbsp;矩形扩大<br><br>2&nbsp;圆形缩小<br><br>3&nbsp;圆形扩大<br><br>4&nbsp;下到上刷新<br><br>5&nbsp;上到下刷新<br><br>6&nbsp;左到右刷新<br><br>7&nbsp;右到左刷新<br><br>8&nbsp;竖百叶窗<br><br>9&nbsp;横百叶窗<br><br>10&nbsp;错位横百叶窗<br><br>11&nbsp;错位竖百叶窗<br><br>12&nbsp;点扩散<br><br>13&nbsp;左右到中间刷新<br><br>14&nbsp;中间到左右刷新<br><br>15&nbsp;中间到上下<br><br>16&nbsp;上下到中间<br><br>17&nbsp;右下到左上<br><br>18&nbsp;右上到左下<br><br>19&nbsp;左上到右下<br><br>20&nbsp;左下到右上<br><br>21&nbsp;横条<br><br>22&nbsp;竖条<br><br>23&nbsp;以上22种随机选择一种<br><br>9、MSThemeCompatible&nbsp;(XP主题)<br><br>说明：是否在IE中关闭&nbsp;xp&nbsp;的主题<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="MSThemeCompatible"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="Yes"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：关闭&nbsp;xp&nbsp;的蓝色立体按钮系统显示样式，从而和win2k&nbsp;很象。<br><br>10、IE6&nbsp;(页面生成器)<br><br>说明：页面生成器generator，是ie6<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="IE6"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="Generator"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：用什么东西做的，类似商品出厂厂商。<br><br>11、Content-scrīpt-Type&nbsp;(脚本相关)<br><br>说明：这是近来W3C的规范，指明页面中脚本的类型。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-scrīpt-Type"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="text/javascrīpt"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：<br><br>★NAME变量<br><br>name是描述网页的，对应于Content（网页内容），以便于搜索引擎机器人查找、分类（目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类）。<br><br>name的value值（name=""）指定所提供信息的类型。有些值是已经定义好的。例如descrīption(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值，如：creationdate(创建日期)&nbsp;、<br><br>document&nbsp;ID(文档编号)和level(等级)等。<br><br>name的content指定实际内容。如：如果指定level(等级)为value(值)，则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。<br><br>1、Keywords&nbsp;(关键字)<br><br>说明：为搜索引擎提供的关键字列表<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Keywords"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="关键词1,关键词2，关键词3,关键词4,&#8230;&#8230;"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：各关键词间用英文逗号&#8220;,&#8221;隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时，搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如：<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Kyewords"</span><span style="color: #ff0000;">&nbsp;Lang</span><span style="color: #0000ff;">="EN"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="vacation,greece,sunshine"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Kyewords"</span><span style="color: #ff0000;">&nbsp;Lang</span><span style="color: #0000ff;">="FR"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="vacances,gr&#232;:ce,soleil"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>2、Descrīption&nbsp;(简介)<br><br>说明：Descrīption用来告诉搜索引擎你的网站主要内容。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Descrīption"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="你网页的简述"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：<br><br>3、Robots&nbsp;(机器人向导)<br><br>说明：Robots用来告诉搜索机器人哪些页面需要索引，哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Robots"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="All|None|Index|Noindex|Follow|Nofollow"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：许多搜索引擎都通过放出robot/spider搜索来登录网站，这些robot/spider就要用到meta元素的一些特性来决定怎样登录。<br><br>all：文件将被检索，且页面上的链接可以被查询；<br><br>none：文件将不被检索，且页面上的链接不可以被查询；(和&nbsp;"noindex,&nbsp;no&nbsp;follow"&nbsp;起相同作用)<br><br>index：文件将被检索；（让robot/spider登录）<br><br>follow：页面上的链接可以被查询；<br><br>noindex：文件将不被检索，但页面上的链接可以被查询；(不让robot/spider登录)<br><br>nofollow：文件将不被检索，页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找)<br><br>4、Author&nbsp;(作者)<br><br>说明：标注网页的作者或制作组<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Author"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="张三，abc@163.com"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：Content可以是：你或你的制作组的名字,或Email<br><br>5、Copyright&nbsp;(版权)<br><br>说明：标注版权<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Copyright"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="本页版权归网易学院所有。All&nbsp;Rights&nbsp;Reserved"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：<br><br>6、Generator&nbsp;(编辑器)<br><br>说明：编辑器的说明<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Generator"</span><span style="color: #ff0000;">&nbsp;Content</span><span style="color: #0000ff;">="PCDATA|FrontPage|"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：Content="你所用编辑器"<br><br>7、revisit-after&nbsp;(重访)<br><br>说明：<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">META&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="revisit-after"</span><span style="color: #ff0000;">&nbsp;CONTENT</span><span style="color: #0000ff;">="7&nbsp;days"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：<br><br>★Head中的其它一些用法<br><br>1、scheme&nbsp;(方案)<br><br>说明：scheme&nbsp;can&nbsp;be&nbsp;used&nbsp;when&nbsp;name&nbsp;is&nbsp;used&nbsp;to&nbsp;specify&nbsp;how&nbsp;the&nbsp;value&nbsp;of&nbsp;content&nbsp;should&nbsp;be&nbsp;interpreted.<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">scheme</span><span style="color: #0000ff;">="ISBN"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="identifier"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="0-14-043205-1"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br><br>注意：<br><br>2、Link&nbsp;(链接)<br><br>说明：链接到文件<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Link&nbsp;</span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="soim.ico"</span><span style="color: #ff0000;">&nbsp;rel</span><span style="color: #0000ff;">="Shortcut&nbsp;Icon"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：很多网站如果你把她保存在收件夹中后，会发现它连带着一个小图标，如果再次点击进入之后还会发现地址栏中也有个小图标。现在只要在你的页头加上这段话，就能轻松实现这一功能。</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">LINK</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;用来将目前文件与其它&nbsp;URL&nbsp;作连结，但不会有连结按钮，用於&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">HEAD</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;标记间，&nbsp;格式如下：<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="URL"</span><span style="color: #ff0000;">&nbsp;rel</span><span style="color: #0000ff;">="relationship"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link&nbsp;</span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="URL"</span><span style="color: #ff0000;">&nbsp;rev</span><span style="color: #0000ff;">="relationship"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>3、Base&nbsp;(基链接)<br><br>说明：插入网页基链接属性<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Base&nbsp;</span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="http://www.***.net/"</span><span style="color: #ff0000;">&nbsp;target</span><span style="color: #0000ff;">="_blank"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：你网页上的所有相对路径在链接时都将在前面加上&nbsp;&#8220;http://www.***.com/&#8221;。其中target="_blank"是链接文件在新的窗口中打开，你可以做其他设置。将&#8220;_blank&#8221;改为&#8220;_parent&#8221;是链接文件将在当前窗口的父级窗口中打开；改为&#8220;_self&#8221;链接文件在当前窗口（帧）中打开；改为&#8220;_top&#8221;链接文件全屏显示。<br><br>以上是META标签的一些基本用法，其中最重要的就是：Keywords&nbsp;和&nbsp;Descrīption的设定。为什么呢？道理很简单，这两个语句可以让搜索引擎能准确的发现你，吸引更多的人访问你的站点!根据现在流行搜索引擎&nbsp;(Google，Lycos，AltaVista等)的工作原理，搜索引擎先派机器人自动在WWW上搜索，当发现新的网站时，便于检索页面中的&nbsp;Keywords和Descrīption，并将其加入到自己的数据库，然后再根据关键词的密度将网站排序。<br><br>由此看来，我们必须记住添加Keywords和Descrīption的META标签，并尽可能写好关键字和简介。否则，<br><br>后果就会是：<br><br>●如果你的页面中根本没有Keywords和Descrīption的META标签，那么机器人是无法将你的站点加入数<br><br>据库，网友也就不可能搜索到你的站点。<br><br>●如果你的关键字选的不好，关键字的密度不高，被排列在几十甚至几百万个站点的后面被点击的可<br><br>能性也是非常小的。<br><br>写好Keywords(关键字)要注意以下几点：<br><br>●不要用常见词汇。例如www、homepage、net、web等。<br><br>●不要用形容词，副词。例如最好的，最大的等。<br><br>●不要用笼统的词汇，要尽量精确。例如&#8220;爱立信手机&#8221;，改用&#8220;T28SC&#8221;会更好。<br><br>&#8220;三人之行，必有我师&#8221;，寻找合适关键词的技巧是：到Google、Lycos、Alta等著名搜索引擎，搜索与<br><br>你的网站内容相仿的网站，查看排名前十位的网站的META关键字，将它们用在你的网站上，效果可想而知了。<br><br>★小窍门<br><br>为了提高搜索点击率，这里还有一些&#8220;捷径&#8221;可以帮得到你：<br><br>●为了增加关键词的密度，将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样)。<br><br>●在图像的ALT注释语句中加入关键字。如：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">IMG&nbsp;</span><span style="color: #ff0000;">SRC</span><span style="color: #0000ff;">="xxx.gif"</span><span style="color: #ff0000;">&nbsp;Alt</span><span style="color: #0000ff;">="Keywords"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>●利用HTML的注释语句，在页面代码里加入大量关键字。用法：&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;这里插入关键字&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;<br><br><br><br><br><br><span style="color: red;">第二篇：Meta 标签之详解&nbsp;html&nbsp;head区域技巧 </span><br><br><br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="content-Type"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="text/html;&nbsp;charset=gb2312"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>也许你认为这些代码可有可无。其实如果你能够用好meta标签，会给你带来意想不到的效果，例如加入关键字会自动被大型搜索网站自动搜集；可以设定页面格式及刷新等等。<br><br>一、meta标签的组成<br><br>meta标签共有两个属性，它们分别是http-equiv属性和name属性，不同的属性又有不同的参数值，这些不同的参数值就实现了不同的网页功能。<br><br>1、name属性<br><br>name属性主要用于描述网页，与之对应的属性值为content，content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的。<br><br>meat标签的name属性语法格式是：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="参数"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="具体的参数值"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;。<br><br>其中name属性主要有以下几种参数：<br><br>A、Keywords(关键字)<br><br>说明：keywords用来告诉搜索引擎你网页的关键字是什么。<br><br>举例：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name&nbsp;</span><span style="color: #0000ff;">="keywords"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="science,&nbsp;education,culture,politics,ecnomics，relationships,&nbsp;entertaiment,&nbsp;human"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>B、description(网站内容描述)<br><br>说明：description用来告诉搜索引擎你的网站主要内容。<br><br>举例：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="description"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="This&nbsp;page&nbsp;is&nbsp;about&nbsp;the&nbsp;meaning&nbsp;of&nbsp;science,&nbsp;education,culture."</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>C、robots(机器人向导)<br><br>说明：robots用来告诉搜索机器人哪些页面需要索引，哪些页面不需要索引。<br><br>content的参数有all,none,index,noindex,follow,nofollow。默认是all。<br><br>举例：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="robots"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="none"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>D、author(作者)<br><br>说明：标注网页的作者<br><br>举例：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="author"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="niceidea,www.aspxuexi.com"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>2、http-equiv属性<br><br>http-equiv顾名思义，相当于http的文件头作用，它可以向浏览器传回一些有用的信息，以帮助正确和精确地显示网页内容，与之对应的属性值为content，content中的内容其实就是各个参数的变量值。<br><br>meat标签的http-equiv属性语法格式是：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="参数"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="参数变量值"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;；其中http-equiv属性主要有以下几种参数：<br><br>A、Expires(期限)<br><br>说明：可以用于设定网页的到期时间。一旦网页过期，必须到服务器上重新传输。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="expires"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="Fri,&nbsp;12&nbsp;Jan&nbsp;2001&nbsp;18:18:18&nbsp;GMT"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：必须使用GMT的时间格式。<br><br>B、Pragma(cache模式)<br><br>说明：禁止浏览器从本地计算机的缓存中访问页面内容。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Pragma"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="no-cache"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：这样设定，访问者将无法脱机浏览。<br><br>C、Refresh(刷新)<br><br>说明：自动刷新并指向新页面。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Refresh"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="2；URL=http://www.aspxuexi.com"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：其中的2是指停留2秒钟后自动刷新到URL网址。<br><br>D、Set-Cookie(cookie设定)<br><br>说明：如果网页过期，那么存盘的cookie将被删除。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Set-Cookie"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="cookievalue=xxx;&nbsp;expires=Friday,&nbsp;12-Jan-2001&nbsp;18:18:18&nbsp;GMT；&nbsp;path=/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：必须使用GMT的时间格式。<br><br>E、Window-target(显示窗口的设定)<br><br>说明：强制页面在当前窗口以独立页面显示。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Window-target"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="_top"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>注意：用来防止别人在框架里调用自己的页面。<br><br>F、content-Type(显示字符集的设定)<br><br>说明：设定页面使用的字符集。<br><br>用法：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="content-Type"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="text/html;&nbsp;charset=gb2312"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>二、meta标签的功能<br><br>上面我们介绍了meta标签的一些基本组成，接着我们再来一起看看meta标签的常见功能：<br><br>１、帮助主页被各大搜索引擎登录<br><br>meta&nbsp;标签的一个很重要的功能就是设置关键字，来帮助你的主页被各大搜索引擎登录，提高网站的访问量。在这个功能中，最重要的就是对Keywords&nbsp;和&nbsp;description的设置。因为按照搜索引擎的工作原理,搜索引擎首先派出机器人自动检索页面中的keywords和decription，并将其加入到自己的数据库，然后再根据关键词的密度将网站排序。因此，我们必须设置好关键字，来提高页面的搜索点击率。下面我们来举一个例子供大家参考：<br><br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="keywords"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="政治,经济,&nbsp;科技,文化,&nbsp;卫生,&nbsp;情感，心灵，娱乐，生活，社会，企业，交通"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="description"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="政治,经济,&nbsp;科技,文化,&nbsp;卫生,&nbsp;情感，心灵，娱乐，生活，社会，企业，交通"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>设置好这些关键字后，搜索引擎将会自动把这些关键字添加到数据库中，并根据这些关键字的密度来进行合适的排序。<br><br>　　２、定义页面的使用语言<br><br>　　这是meta标签最常见的功能,在制作网页时,我们在纯HTML代码下都会看到它,它起的作用是定义你网页的语言,当浏览者访问你的网页时,浏览器会自动识别并设置网页中的语言,如果你网页设置的是GB码,而浏览者没有安装GB码,这时网页只会呈现浏览者所设置的浏览器默认语言。同样的,如果该网页是英语,那么charset=en。下面就是一个具有代表性的例子：<br><br>　　<br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">=&#8243;content－Type&#8243;&nbsp;</span><span style="color: #ff0000;">content</span><span style="color: #0000ff;">=&#8243;text/html;&nbsp;</span><span style="color: #ff0000;">charset</span><span style="color: #0000ff;">=gb2312&#8243;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>该代码就表示将网页的语言设置成国标码。<br><br>　　３、自动刷新并指向新的页面<br><br>　　如果你想使您的网页在无人控制的情况下，能自动在指定的时间内去访问指定的网页，就可以使用meta标签的自动刷新网页的功能。下面我们来看一段代码：<br><br>　　<br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">=&#8243;refresh&#8243;&nbsp;</span><span style="color: #ff0000;">content</span><span style="color: #0000ff;">=&#8243;２;&nbsp;</span><span style="color: #ff0000;">URL</span><span style="color: #0000ff;">=http://www.aspxuexi.com&#8243;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>　　这段代码可以使当前某一个网页在２秒后自动转到http://www.aspxuexicom页面中去,这就是meta的刷新作用,在content中,２代表设置的时间（单位为秒）,而URL就是在指定的时间后自动连接的网页地址。<br><br>　　４、实现网页转换时的动画效果<br><br>　　使用meta标签，我们还可以在进入网页或者离开网页的一刹那实现动画效果，我们只要在页面的html代码中的</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">标签之间添加如下代码就可以了：<br><br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Page-Enter"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="revealTrans(duration=5.0,&nbsp;transition=20)"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Page-Exit"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="revealTrans(duration=5.0,&nbsp;transition=20)"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>一旦上述代码被加到一个网页中后，我们再进出页面时就会看到一些特殊效果，这个功能其实与FrontPage2000中的Format/Page&nbsp;Transition一样，但我们要注意的是所加网页不能是一个Frame页;<br><br>　　５、网页定级评价<br><br>　　IE4.0以上版本的浏览器可以防止浏览一些受限制的网站,而之所以浏览器会自动识别某些网站是否受限制,就是因为在网站meta标签中已经设置好了该网站的级别,而该级别的评定是由美国RSAC,即娱乐委员会的评级机构评定的,如果你需要评价自己的网站,可以连接到网站&nbsp;http://www.rsac.org/,按要求提交表格,那么RSAC会提供一段meta代码给你,复制到自己网页里就可以了。下面就是一段代码的样例：<br><br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">=&#8243;PICS－Label&#8243;&nbsp;</span><span style="color: #ff0000;">content</span><span style="color: #0000ff;">=&#8242;(PICS－1.1&nbsp;</span><span style="color: #ff0000;">&#8243;&nbsp;http://www.chinahtml.com/index.html&#8243;&nbsp;l&nbsp;gen&nbsp;true&nbsp;comment&nbsp;&#8243;&nbsp;RSACi&nbsp;North&nbsp;America&nbsp;Server&#8243;&nbsp;for&nbsp;&#8243;http://www.rsac.org&#8243;&nbsp;on&nbsp;&#8243;&nbsp;2001.08.16T08:15－0500&#8243;&nbsp;r&nbsp;(n&nbsp;0&nbsp;s&nbsp;0&nbsp;v&nbsp;0&nbsp;l&nbsp;0))&#8242;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>　　６、控制页面缓冲<br><br>　　meta标签可以设置网页到期的时间,也就是说,当你在Internet&nbsp;Explorer&nbsp;浏览器中设置浏览网页时首先查看本地缓冲里的页面,那么当浏览某一网页,而本地缓冲又有时,那么浏览器会自动浏览缓冲区里的页面,直到meta中设置的时间到期,这时候,浏览器才会去取得新页面。例如下面这段代码就表示网页的到期时间是2001年1月12日18时18分18秒。<br><br>　　<br>HTML&nbsp;代码:<br><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">=&#8243;expires&#8243;&nbsp;</span><span style="color: #ff0000;">content</span><span style="color: #0000ff;">=&#8243;Friday,&nbsp;</span><span style="color: #ff0000;">12-Jan-2001&nbsp;18:18:18&nbsp;GMT&#8243;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br><br>　　７、控制网页显示的窗口<br><br>　　我们还可以使用meta标签来控制网页显示的窗口，只要在网页中加入下面的代码就可以了：</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">metahttp-equiv</span><span style="color: #0000ff;">="window-target"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="_top"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">，这段代码可以防止网页被别人作为一个Frame调用。</span></div>
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-11 16:38 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/11/5749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 优化MySQL数据库性能的八种方法</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/08/5734.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Mon, 08 Sep 2008 10:36:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/08/5734.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5734.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/08/5734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5734.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5734.html</trackback:ping><description><![CDATA[<strong>&nbsp;&nbsp;&nbsp;&nbsp; 1、选取最适用的字段属性</strong>
<p>　　MySQL可以很好的支持大数据量的存取，<span style="color: red;">但是一般说来，数据库中的表越小，在它上面执行的查询也就会越快</span>。因此，在创建表的时候，为了获得更
好的性能，我们可以将表中<span style="color: red;">字段的宽度设得尽可能小</span>。例如，在定义邮政编码这个字段时，如果将其设置为CHAR(255),显然给数据库增加了不必要的空
间，甚至使用VARCHAR这种类型也是多余的，因为CHAR(6)就可以很好的完成任务了。同样的，如果可以的话，我们应该使用MEDIUMINT而不
是BIGIN来定义整型字段。</p>
<p>　　另外一个提高效率的方法是在可能的情况下，应该尽量<span style="color: red;">把字段设置为NOT NULL</span>，这样在将来执行查询的时候，数据库不用去比较NULL值。</p>
<p>　　对于某些文本字段，例如&#8220;<span style="color: red;">省份&#8221;或者&#8220;性别&#8221;，我们可以将它们定义为ENUM类型</span>。因为在MySQL中，<span style="color: red;">ENUM类型被当作数值型数据来处理</span>，而数值型数据被处理起来的速度要比文本类型快得多。这样，我们又可以提高数据库的性能。</p>
<p>　　<strong> 2、使用连接（JOIN）来代替子查询(Sub-Queries)</strong> </p>
<p>　　MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果，然后把这个结果作为过滤条件用在另一
个查询中。例如，我们要将客户基本信息表中没有任何订单的客户删除掉，就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来，然后将结果传递
给主查询，如下所示：</p>
<p>　　DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )</p>
<p>　　使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作，同时也可以避免事务或者表锁死，并且写起来也很容易。但是，有些情况
下，子查询可以被更有效率的连接（JOIN）.. 替代。例如，假设我们要将所有没有订单记录的用户取出来，可以用下面这个查询完成：</p>
<p>　　SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )</p>
<p>　　如果使用连接（JOIN）.. 来完成这个查询工作，速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话，性能将会更好，查询如下：</p>
<p>　　SELECT * FROM customerinfo LEFT JOIN salesinfoON
customerinfo.CustomerID=salesinfo. CustomerID WHERE
salesinfo.CustomerID IS NULL</p>
<p>　　<span style="color: red;">连接（JOIN）.. 之所以更有效率一些，是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。</span></p>
<p>　　<strong> 3、使用联合(UNION)来代替手动创建的临时表</strong> </p>
<p>　　MySQL 从 4.0 的版本开始支持<span style="color: red;"> UNION 查询，它可以把需要使用临时表的两条或更多的 SELECT
查询合并的一个查询中。在客户端的查询会话结束的时候，临时表会被自动删除</span>，从而保证数据库整齐、高效。使用 UNION
来创建查询的时候，我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了，要注意的是所有 SELECT
语句中的字段数目要想同。下面的例子就演示了一个使用 UNION的查询。</p>
<p>　　SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM author<br>　　UNION<br>　　SELECT Name, Supplier FROM product</p>
<p>　　<strong> 4、事务</strong> </p>
<p>　　尽管我们可以使用子查询（Sub-Queries）、连接（JOIN）和联合（UNION）来创建各种各样的查询，但不是所有的数据库操作都可
以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下，当这个语句块中的某一条语句运行出错
的时候，整个语句块的操作就会变得不确定起来。设想一下，要把某个数据同时插入两个相关联的表中，可能会出现这样的情况：第一个表中成功更新后，数据库突
然出现意外状况，造成第二个表中的操作没有完成，这样，就会造成数据的不完整，甚至会破坏数据库中的数据。要避免这种情况，就应该使用事务，它的作用是：
要么语句块中每条语句都操作成功，要么都失败。换句话说，就是可以保持数据库中数据的一致性和完整性。事物以BEGIN
关键字开始，COMMIT关键字结束。在这之间的一条SQL操作失败，那么，ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。</p>
<p style="color: red;">　　BEGIN;</p>
<p style="color: red;">　　INSERT INTO salesinfo SET CustomerID=14;</p>
<p style="color: red;">　　UPDATE inventory SET Quantity=11</p>
<p style="color: red;">　　WHERE item='book';</p>
<p style="color: red;">　　COMMIT;</p>
<p>　　<span style="color: red;">事务的另一个重要作用是当多个用户同时使用相同的数据源时，它可以利用<span style="color: #0817ff;">锁定数据库</span>的方法来为用户提供一种安全的访问方式，这样可以保证用户的操作不被其它的用户所干扰。</span></p>
<p><strong> 5、锁定表</strong>
</p>
<p>　　尽管事务是维护数据库完整性的一个非常好的方法，但却因为它的独占性，有时会影响数据库的性能，尤其是在很大的应用系统中。由于在事务执行的过程中，数据库将会被锁定，因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户</p>
<p>　　来使用，事务造成的影响不会成为一个太大的问题；但假设有成千上万的用户同时访问一个数据库系统，例如访问一个电子商务网站，就会产生比较严重的响应延迟。</p>
<p>　　其实，有些情况下我们可以通过<span style="color: #0817ff;">锁定表</span>的方法来获得更好的性能。下面的例子就用锁定表的方法来完成前面一个例子中事务的功能。</p>
<p>　　<span style="color: #0817ff;">LOCK TABLE inventory WRITE</span><br>　　SELECT Quantity FROM inventory<br>　　WHERE Item='book';<br>　　...</p>
<p>　　UPDATE inventory SET Quantity=11<br>　　WHERE Item='book';<br>　　<span style="color: #0817ff;">UNLOCK TABLES</span></p>
<p>　　这里，我们用一个 SELECT 语句取出初始数据，通过一些计算，用 UPDATE 语句将新值更新到表中。包含有 WRITE 关键字的
LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前，不会有其它的访问来对 inventory
进行插入、更新或者删除的操作。</p>
<p>　　<strong> 6、使用外键</strong> </p>
<p>　　<span style="color: #0817ff;">锁定表的方法可以维护数据的完整性，但是它却不能保证数据的关联性</span>。<span style="color: #0817ff;">这个时候我们就可以使用外键</span>。例如，外键可以保证每一条销售记录都指向某一
个存在的客户。在这里，外键可以把customerinfo
表中的CustomerID映射到salesinfo表中CustomerID，任何一条没有合法CustomerID的记录都不会被更新或插入到
salesinfo中。</p>
<p>　　CREATE TABLE customerinfo<br>　　(<br>　　　CustomerID INT NOT NULL ,<br>　　　PRIMARY KEY ( CustomerID )<br>　　) TYPE = INNODB;<br>　　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>　　注意例子中的参数&#8220;<span style="color: #ff0000;">ON DELETE CASCADE&#8221;。该参数保证当 customerinfo
表中的一条客户记录被删除的时候，salesinfo 表中所有与该客户相关的记录也会被自动删除</span>。<span style="color: #ff0000;">如果要在 MySQL
中使用外键，一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型</span>。该类型不是 MySQL 表的默认类型。定义的方法是在
CREATE TABLE 语句中加上 TYPE=INNODB。如例中所示。</p>
<p>　　<strong> 7、使用索引</strong> </p>
<p>　　索引是提高数据库性能的常用方法，它可以令数据库服务器以比没有索引快得多的速度检索特定的行，<span style="color: #ff0000;">尤其是在查询语句当中包含有MAX(),
MIN()和ORDERBY这些命令的时候，性能提高更为明显</span>。那该对哪些字段建立索引呢？一般说来，索引应建立在那些将用于JOIN,
WHERE判断和ORDER
BY排序的字段上。<span style="color: #ff0000;">尽量不要对数据库中某个含有大量重复的值的字段建立索引</span>。<span style="color: #ff0000;">对于一个ENUM类型的字段来说，出现大量重复值是很有可能的情况</span>，例如
customerinfo中的&#8220;province&#8221;..
字段，在这样的字段上建立索引将不会有什么帮助；相反，还有可能降低数据库的性能。我们在创建表的时候可以同时创建合适的索引，也可以使用ALTER
TABLE或CREATE INDEX在以后创建索引。此外，MySQL</p>
<p>　　从版本3.23.23开始支持全文索引和搜索。<span style="color: #ff0000;">全文索引在MySQL 中是一个FULLTEXT类型索引</span>，<span style="color: #ff0000;">但仅能用于MyISAM
类型的表</span>。对于一个大的数据库，将数据装载到一个没有FULLTEXT索引的表中，然后再使用ALTER TABLE或CREATE
INDEX创建索引，将是非常快的。<span style="color: #ff0000;">但如果将数据装载到一个已经有FULLTEXT索引的表中，执行过程将会非常慢</span>。</p>
<p>　　<strong> 8、优化的查询语句</strong> </p>
<p>　　绝大多数情况下，使用索引可以提高查询的速度，但如果SQL语句使用不恰当的话，索引将无法发挥它应有的作用。下面是应该注意的几个方面。首
先，<span style="color: #ff0000;">最好是在相同类型的字段间进行比较的操作。</span>在MySQL
3.23版之前，这甚至是一个必须的条件。例如不能将一个建有索引的INT字段和BIGINT字段进行比较；但是作为特殊的情况，在CHAR类型的字段和
VARCHAR类型字段的字段大小相同的时候，可以将它们进行比较。<span style="color: #ff0000;">其次，在建有索引的字段上尽量不要使用函数进行操作。</span></p>
<p>　　例如，在一个DATE类型的字段上使用YEAE()函数时，将会使索引不能发挥应有的作用。所以，下面的两个查询虽然返回的结果一样，但后者要比前者快得多。</p>
<p>　　SELECT * FROM order WHERE YEAR(OrderDate)&lt;2001;<br>　　SELECT * FROM order WHERE OrderDate&lt;"2001-01-01";</p>
<p>　　同样的情形也会发生在对数值型字段进行计算的时候：</p>
<p>　　SELECT * FROM inventory <span style="color: #ff0000;">WHERE Amount/7&lt;24;</span><br>　　SELECT * FROM inventory <span style="color: #ff0000;">WHERE Amount&lt;24*7;</span></p>
<p>　　上面的两个查询也是返回相同的结果，但后面的查询将比前面的一个快很多。第三，在搜索字符型字段时，我们有时会使用 LIKE 关键字和通配符，这种做法虽然简单，但却也是以牺牲系统性能为代价的。例如下面的查询将会比较表中的每一条记录。</p>
<p>　　SELECT * FROM books<br>　　WHERE name like "MySQL%"</p>
<p>　　但是如果换用下面的查询，返回的结果一样，但速度就要快上很多：</p>
<p>　　SELECT * FROM books<br>　　WHERE name&gt;="MySQL"and name&lt;"MySQM"</p>
<p>　　最后，<span style="color: #ff0000;">应该注意避免在查询中让MySQL进行自动类型转换，因为转换过程也会使索引变得不起作用。</span></p>
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-08 18:36 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/08/5734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用PHP构建自定义搜索引擎</title><link>http://www.phpweblog.net/fuyongjie/archive/2008/09/06/5719.html</link><dc:creator>bestmost</dc:creator><author>bestmost</author><pubDate>Fri, 05 Sep 2008 16:23:00 GMT</pubDate><guid>http://www.phpweblog.net/fuyongjie/archive/2008/09/06/5719.html</guid><wfw:comment>http://www.phpweblog.net/fuyongjie/comments/5719.html</wfw:comment><comments>http://www.phpweblog.net/fuyongjie/archive/2008/09/06/5719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/fuyongjie/comments/commentRss/5719.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/fuyongjie/services/trackbacks/5719.html</trackback:ping><description><![CDATA[<h1><a href="http://tech.ddvip.com/2007-09/118960947134305_1.html">用PHP构建自定义搜索引擎</a></h1>
<br>
<h1 class="title">搜索引擎核心技术(PHP编程思路)</h1>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">谈到网页搜索引擎时，大多数人都会想到雅虎。的确，雅虎开创了一个互联网络的搜索时代。然而，雅虎目前用于搜索网页的技术却并非该公司原先自己开发的。2000年8月，雅虎采用了Google（www</span><span style="color: #000000;">.</span><span style="color: #000000;">google</span><span style="color: #000000;">.</span><span style="color: #000000;">com）这家由斯坦福大学学生创建的风险公司的技术。理由非常简单，Google的搜索引擎比雅虎先前使用的技术能更快、更准确搜索到所需要的信息。<br><br>　　让我们自己来设计、开发一个强劲、高效的搜索引擎和数据库恐怕短时间内在技术、资金等方面是不可能的，不过，既然雅虎都在使用别人的技术，那么我们是不是也可以使用别人现成的搜索引擎网站呢？<br><br>剖析编程思路<br><br>　　我们可以这样设想：模拟一个查询，向某个搜索引擎网站发出相应格式的搜索命令，然后传回搜索结果，对结果的HTML代码进行分析，剥离多余的字符和代码，最后按所需要的格式显示在我们自己的网站页面里。<br><br>　　这样，问题的关键就在于，我们要选定一个搜索信息准确（这样我们的搜索才会更有意义啊）、速度快（因为我们分析搜索结果并显示需要额外的时间），搜索结果简洁（便于进行HTML源代码分析和剥离）的搜索网站，由于新一代搜索引擎Google的各种优良特性，这里我们选择它为例，来看看用PHP怎样实现后台对Google(www</span><span style="color: #000000;">.</span><span style="color: #000000;">google</span><span style="color: #000000;">.</span><span style="color: #000000;">com)搜索、前台个性化显示这一过程。<br><br>　　我们先来看看Google的查询命令的构成。进入www</span><span style="color: #000000;">.</span><span style="color: #000000;">google</span><span style="color: #000000;">.</span><span style="color: #000000;">com网站，在查询栏中输入&#8220;abcd&#8221;，点击查询按钮，我们可以发现浏览器的地址栏变成：</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.google.com/search?q=abcd&amp;btnG=Google%CB%D1%CB%F7&amp;&nbsp;amp;hl=zh-CN&amp;lr=</span><span style="color: #000000;">"</span><span style="color: #000000;">，可见，Google是通过表单的get方式来传递查询参数并递交查询命令的。我们可以使用PHP中的&nbsp;</span><span style="color: #008080;">file</span><span style="color: #000000;">()函数来模拟这个查询过程。<br><br>了解File（）函数<br><br>　　语法</span><span style="color: #000000;">:</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">file</span><span style="color: #000000;">(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;filename);<br><br>　　返回值为数组，将文件全部读入数组变量中。这里的文件可以是本地的，也可以是远程的，远程文件必须指明所使用的协议。例如：&nbsp;result</span><span style="color: #000000;">=</span><span style="color: #008080;">file</span><span style="color: #000000;">(&#8220;http</span><span style="color: #000000;">:</span><span style="color: #008000;">//</span><span style="color: #008000;">www.google.com/search?q=a&nbsp;<img src="http://www.phpweblog.net/Images/dot.gif">&nbsp;mp;hl=zh-CN&amp;lr=&#8221;)，该语句将模拟我们在Google上查询单词&#8220;abcd&#8221;的过程，并将搜索结果以每行为元素，传回到数组变量&nbsp;result中。因为这里读取的文件是远程的，所以协议名&#8220;http://&#8221;不能缺少。</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>　　如果要让用户输入搜索字符进行任意搜索，我们可以做一个输入文本框和提交按钮，并将上文中的被搜索字符&#8220;abcd&#8221;用变量替换：<br></span><span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br></span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&lt;form&gt;</span><span style="color: #000000;">'</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">没有参数的form，默认提交方式为get，提交到本身</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&lt;input&nbsp;type="text"&nbsp;name="keywords"&gt;</span><span style="color: #000000;">'</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">构造一个文本输入框</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&lt;input&nbsp;type="submit"&nbsp;value="查询"&gt;</span><span style="color: #000000;">'</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">构造一个提交查询按钮</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&lt;/form&gt;</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">isset</span><span style="color: #000000;">(&nbsp;keywords))&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">提交后PHP会生成变量&nbsp;kwywords,即要求下面的程序在提交后运行</span><span style="color: #008000;"><br></span><span style="color: #000000;">{<br></span><span style="color: #008080;">urlencode</span><span style="color: #000000;">(&nbsp;keywords);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">对用户输入内容进行URL编码</span><span style="color: #008000;"><br></span><span style="color: #000000;">result</span><span style="color: #000000;">=</span><span style="color: #008080;">file</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.google.com/search?q=</span><span style="color: #000000;">"</span><span style="color: #000000;">.</span><span style="color: #000000;">&nbsp;keywords</span><span style="color: #000000;">.</span><span style="color: #000000;">"</span><span style="color: #000000;">&amp;btnG=Google%CB%D1%CB%F7&amp;hl=zh-CN&amp;lr=</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008000;">//</span><span style="color: #008000;">对查询语句进行变量替换,将查询结果保存在数组变量&nbsp;result中</span><span style="color: #008000;"><br></span><span style="color: #000000;">result_string</span><span style="color: #000000;">=</span><span style="color: #008080;">join</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;result);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">将数组$result合并成字符串，各数组元素之间用空格粘和</span><span style="color: #008000;"><br></span><span style="color: #000000;"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">进一步处理</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br></span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br><br>　　上面的这段程序已经能按用户输入内容进行查询，并将返回的结果合成一个字符串变量</span><span style="color: #800080;">$result_string</span><span style="color: #000000;">。请注意要使用urlencode()函数将用户输入内容进行URL编码，才可以正常地对输入的汉字、空格以及其他特殊字符进行查询，这样做也是尽可能逼真地模拟Google的查询命令，保证搜索结果的正确性。<br><br>对Google的分析<br><br>　　为了便于理解，现在假设我们所真正需要的东西是：搜索结果的标题。网址和简介等，这是一个简洁而典型的需求。这样，我们所要做的便是：去除Google搜索结果的台头和脚注，包括一个Google的标志、再次搜索的输入框和搜索结果说明等，并且在剩余的搜索结果各项条目中剥离原来的HTML格式标记，替换成我们想要的格式。<br><br>　　要做到这一点，我们必须仔细地分析Google搜索结果的HTML源码，找到其中的规律。不难发现，在Google的搜索结果的正文总是包含在源码的第一个</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">标记和倒数第二个</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">标记之间，并且倒数第二个</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">标记后紧跟table字符，而且这个组合&nbsp;&#8220;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">table&#8221;在源码中也仅有一次，利用这个特点，我们可以这样去除Google的台头和脚注。<br><br>　　以下所有程序均依次接续在上文程序的&#8220;进一步处理&#8221;处。<br><br>　　result_string&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">strstr</span><span style="color: #000000;">(&nbsp;result_string</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;p&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">取&nbsp;result_string从第一个&lt;p&gt;开始后的字符串，以去除Google台头</span><span style="color: #008000;"><br></span><span style="color: #000000;">position</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">strpos</span><span style="color: #000000;">(&nbsp;result_string</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;p&gt;table符号的位置<br>result_string=&nbsp;substr(&nbsp;result_string,0,&nbsp;position);//截取第一个&lt;p&gt;table符号之前的字符串,以去除脚注<br><br>应用与实现<br><br>　　OK，现在我们已经得到有用的HTML源码主干了，剩下的问题是如何自主地显示这些内容。我们再分析一下这些搜索结果条目，发现每个条目之间也是很有规律的用<br>分隔，也就是各成一个段落，按这个特点我们用explode()函数把每个条目切开：<br><br>　　语法：explode(string&nbsp;separator,&nbsp;string&nbsp;string);<br><br>　　返回一个数组，按separator切开后的各个小字串被保存在数组中。<br><br>　　于是：<br>result_array=explode(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;result_string);&nbsp;//用字串</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">把结果切开<br><br>　　我们就得到一个数组&nbsp;result_array，其中每个元素都是一个搜索结果条目。我们所要做的仅仅是研究每个条目及其HTML显示格式代码，然后按要求替换就行了。下面用循环来处理&nbsp;result_array中的每个条目。<br>for(&nbsp;i=0;&nbsp;i&nbsp;{<br><img src="http://www.phpweblog.net/Images/dot.gif">&nbsp;//处理每个条目<br>}<br><br>　　对于每个条目，我们也很容易找到一些特点：每个条目都由标题、摘要、简介、类别、网址等组成，每个部分都换行，即包含&lt;br&gt;标记，于是再次分割：（以下处理程序放在上文的循环中）<br>every_item=explode(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">br</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;result_array[&nbsp;i]);<br><br>　　这样我们得到一个数组&nbsp;every_item，其中&nbsp;every_item[0]就是标题，&nbsp;every_item[1]和&nbsp;every_item[2]两行为摘要，&nbsp;every_item[3]和&nbsp;every_item[4]等等的头部如果包含&#8220;&lt;font&nbsp;size=-1&nbsp;color=#6f6f6f&nbsp;&gt;简介:&lt;/font&gt;&#8221;、&#8220;&lt;font&nbsp;size=-1&nbsp;color=#6f6f6f&gt;类别:&lt;/font&gt;&#8221;字符，则是简介或类别（因为有的结果条目没有该项），如果头部包含&#8220;&lt;&nbsp;font&nbsp;color=green&gt;&#8221;则肯定就是网址啦，这种对比判断我们常使用正则表达式（略），如果要替换也很方便，比如包含标题的$every_item[0]，其本身是有链接的，我们希望修改这个链接属性，让它在新窗口打开链接：<br>echo&nbsp;eregi_replace('&nbsp;{<br><img src="http://www.phpweblog.net/Images/dot.gif">&nbsp;//处理每个条目中除去第一项（第一项为标题，已经显示）的每一项<br><img src="http://www.phpweblog.net/Images/dot.gif">&nbsp;//更多格式修改<br>}<br><br>　　这样就修改了链接属性，其余很多显示格式的修改、剥离、替换都能用正则替换eregi_replace()来完成。<br><br>　　至此我们已经得到了每个搜索条目的每一项，并能任意修改每项的格式，甚至可以给他套上漂亮的表格。然而一个好的程序应该能适应各种运行环境的，这里也不例外，我们其实还只是讨论了搜索结果的HTML剥离的一种框架方法，真正要做得完美，还要考虑很多内容，比如要显示一共搜索出多少结果，分成多少页等等，甚至还可以刨除与Google相关的那些&#8220;类别&#8221;、&#8220;简介&#8221;等代码，让客户根本看不到原始网站。不过这些内容和要求我们都能通过分析HTML进行剥离得到。现在大家完全能自己动手，做个极富个性化的搜索引擎啦。<br></span></div>
<br><img src ="http://www.phpweblog.net/fuyongjie/aggbug/5719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/fuyongjie/" target="_blank">bestmost</a> 2008-09-06 00:23 <a href="http://www.phpweblog.net/fuyongjie/archive/2008/09/06/5719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>