﻿<?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博客-鱼有所思,鱼有所悟</title><link>http://www.phpweblog.net/kiyone/</link><description>做个不错的人，微笑面对人生</description><language>zh-cn</language><lastBuildDate>Sat, 06 Sep 2008 04:16:44 GMT</lastBuildDate><pubDate>Sat, 06 Sep 2008 04:16:44 GMT</pubDate><ttl>60</ttl><item><title>MySQL 5.0数据库的新特性的存储过程</title><link>http://www.phpweblog.net/kiyone/archive/2008/09/02/5699.html</link><dc:creator>鱼有所思</dc:creator><author>鱼有所思</author><pubDate>Tue, 02 Sep 2008 08:01:00 GMT</pubDate><guid>http://www.phpweblog.net/kiyone/archive/2008/09/02/5699.html</guid><wfw:comment>http://www.phpweblog.net/kiyone/comments/5699.html</wfw:comment><comments>http://www.phpweblog.net/kiyone/archive/2008/09/02/5699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/kiyone/comments/commentRss/5699.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/kiyone/services/trackbacks/5699.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt">MySQL 5.0</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库的新特性的存储过程<br><br></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">当你提交一个查询的时候，<span lang=EN-US>MySQL</span>会分析它，看是否可以做一些优化使处理该查询的速度更快。这一部分将介绍查询优化器是如何工作的。如果你想知道<span lang=EN-US>MySQL</span>采用的优化手段，可以查看<span lang=EN-US>MySQL</span>参考手册。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">当然，<span lang=EN-US>MySQL</span>查询优化器也利用了索引，但是它也使用了其它一些信息。例如，如果你提交如下所示的查询，那么无论数据表有多大，<span lang=EN-US>MySQL</span>执行它的速度都会非常快：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT * FROM tbl_name WHERE 0</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">；<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在这个例子中，<span lang=EN-US>MySQL</span>查看<span lang=EN-US>WHERE</span>子句，认识到没有符合查询条件的数据行，因此根本就不考虑搜索数据表。你可以通过提供一个<span lang=EN-US>EXPLAIN</span>语句看到这种情况，这个语句让<span lang=EN-US>MySQL</span>显示自己执行的但实际上没有真正地执行的<span lang=EN-US> SELECT</span>查询的一些信息。如果要使用<span lang=EN-US>EXPLAIN</span>，只需要在<span lang=EN-US>EXPLAIN</span>单词放在<span lang=EN-US>SELECT</span>语句的前面：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mysql&gt; EXPLAIN SELECT * FROM tbl_name WHERE 0\G <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">*************************** <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">1. row *************************** <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">id: 1 <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select_type: SIMPLE <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">table: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">type: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">possible_keys: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">key: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">key_len: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">ref: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">rows: NULL <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Extra: Impossible WHERE<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">通常情况下，<span lang=EN-US>EXPLAIN</span>返回的信息比上面的信息要多一些，还包括用于扫描数据表的索引、使用的联结类型、每张数据表中估计需要检查的数据行数量等非空（<span lang=EN-US>NULL</span>）信息。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">优化器是如何工作的 </span></strong><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">MySQL</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">查询优化器有几个目标，但是其中最主要的目标是尽可能地使用索引，并且使用最严格的索引来消除尽可能多的数据行。你的最终目标是提交<span lang=EN-US>SELECT</span>语句查找数据行，而不是排除数据行。优化器试图排除数据行的原因在于它排除数据行的速度越快，那么找到与条件匹配的数据行也就越快。如果能够首先进行最严格的测试，查询就可以执行地更快。假设你的查询检验了两个数据列，每个列上都有索 引：<span lang=EN-US><br>&nbsp;<o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT col3 FROM mytable <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE col1 = &#8217;some value&#8217; AND col2 = &#8217;some other value&#8217;;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">假设<span lang=EN-US>col1</span>上的测试匹配了<span lang=EN-US>900</span>个数据行，<span lang=EN-US>col2</span>上的测试匹配了<span lang=EN-US>300</span>个数据 行，而同时进行的测试只得到了<span lang=EN-US>30</span>个数据行。先测试<span lang=EN-US>Col1</span>会有<span lang=EN-US>900</span>个数据行，需要检查它们找到其中的<span lang=EN-US>30</span>个与<span lang=EN-US>col2</span>中的值匹配记录，其中就有<span lang=EN-US>870 </span>次是失败了。先测试<span lang=EN-US>col2</span>会有<span lang=EN-US>300</span>个数据行，需要检查它们找到其中的<span lang=EN-US>30</span>个与<span lang=EN-US>col1</span>中的值匹配的记录，只有<span lang=EN-US>270</span>次是失败的，因此需要的计算和磁盘<span lang=EN-US> I/O</span>更少。其结果是，优化器会先测试<span lang=EN-US>col2</span>，因为这样做开销更小。<br><span lang=EN-US>&nbsp;<o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">你可以通过下面一个指导帮助优化器更好地利用索引：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">尽量比较数据类型相同的数据列。当你在比较操作中使用索引数据列的时候，请使用数据 类型相同的列。相同的数据类型比不同类型的性能要高一些。例如，<span lang=EN-US>INT</span>与<span lang=EN-US>BIGINT</span>是不同的。<span lang=EN-US>CHAR(10)</span>被认为是<span lang=EN-US>CHAR(10)</span>或<span lang=EN-US> VARCHAR(10)</span>，但是与<span lang=EN-US>CHAR(12)</span>或<span lang=EN-US>VARCHAR(12)</span>不同。如果你所比较的数据列的类型不同，那么可以使用<span lang=EN-US>ALTER TABLE</span>来修改其中一个，使它们的类型相匹配。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">尽可能地让索引列在比较表达式中独立。如果你在函数调用或者更复杂的算术表达式条件中使用了某个数据列，<span lang=EN-US>MySQL</span>就不会使用索引，因为它必须计算出每个数据行的表达式值。有时候这种情况无法避免，但是很多情况下你可以重新编写一个查询让索引列独立地出现。<br><span lang=EN-US>&nbsp;<o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">下面的<span lang=EN-US>WHERE</span>子句显示了这种情况。它们的功能相同，但是对于优化目标来说就有很大差异了：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE mycol &lt; 4 / 2 <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE mycol * 2 &lt; 4<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">对于第一行，优化器把表达式<span lang=EN-US>4/2</span>简化为<span lang=EN-US>2</span>，接着使用<span lang=EN-US>mycol</span>上的索引来快速地查 找小于<span lang=EN-US>2</span>的值。对于第二个表达式，<span lang=EN-US>MySQL</span>必须检索出每个数据行的<span lang=EN-US>mycol</span>值，乘以<span lang=EN-US>2</span>，接着把结果与<span lang=EN-US>4</span>进行比较。在这种情况下，不会使用索引。数据列中的每个值都必须被检索到，这样才能计算出比较表达式左边的值。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">我们看另外一个例子。假设你对<span lang=EN-US>date_col</span>列进行了索引。如果你提交一条如下所示的查询，就不会使用这个索引：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT * FROM mytbl WHERE YEAR(date_col) &lt; 1990; <br><br><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这个表达式不会把<span lang=EN-US>1990</span>与索引列进行比较；它会把<span lang=EN-US>1990</span>与该数据列计算出来的值比较，而每个数据行都必须计算出这个值。其结果是，没有使用<span lang=EN-US> date_col</span>上的索引，因为执行这样的查询需要全表扫描。怎么解决这个问题呢？只需要使用文本日期，接着就可以使用<span lang=EN-US>date_col</span>上的索引来查找列 中匹配的值了：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE date_col &lt; &#8217;<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="1" Month="1" Year="1990">1990-01-01</st1:chsdate>&#8217; <br><br><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">但是，假设你没有特定的日期。你可能希望找到一些与今天相隔固定的几天的日期的记录。表达这种类型的比较有很多种方法<span lang=EN-US>--</span>它们的效率并不同。下面就有三种：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE TO_DAYS(date_col) - TO_DAYS(CURDATE()) &lt; cutoff <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE TO_DAYS(date_col) &lt; cutoff + TO_DAYS(CURDATE()) <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE date_col &lt; DATE_ADD(CURDATE(), INTERVAL cutoff DAY)<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">对于第一行，不会用到索引，因为每个数据行都必须检索以计算出<span lang=EN-US>TO_DAYS (date_col)</span>的值。第二行要好一些。<span lang=EN-US>Cutoff</span>和<span lang=EN-US>TO_DAYS(CURDATE())</span>都是常量，因此在处理查询之前，比较表达式的右边可以被优化器一次性计算出来，而不需要每个数据行都计算一次。但是<span lang=EN-US>date_col</span>列仍然出现在函数调用中，它阻止了索引的使用。第三行是这几个中最好的。同样，在执行查询之前，比较表达式的右边可以作为常量一次性计算出来，但是现在它的值是一个日期。这个值可以直接与<span lang=EN-US>date_col</span>值进行比较，再也不需要转换成天数了。在这种情况下，会使用索引。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在<span lang=EN-US>LIKE</span>模式的开头不要使用通配符。有些字符串搜索使用如下所示的<span lang=EN-US>WHERE</span>子句：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE col_name LIKE &#8217;%string%&#8217; <br><br><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">如果你希望找到那些出现在数据列的任何位置的字符串，这个语句就是对的。但是不要因 为习惯而简单地把<span lang=EN-US>"%"</span>放在字符串的两边。如果你在查找出现在数据列开头的字符串，就删掉前面的<span lang=EN-US>"%"</span>。假设你要查找那些类似<span lang=EN-US>MacGregor</span>或<span lang=EN-US> MacDougall</span>等以<span lang=EN-US>"Mac"</span>开头的名字。在这种情况下，<span lang=EN-US>WHERE</span>子句如下所示：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE last_name LIKE &#8217;Mac%&#8217; <br><br><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">优化器查看该模式中词首的文本，并使用索引找到那些与下面的表达式匹配的数据行。下面的表达式是使用<span lang=EN-US>last_name</span>索引的另一种形式：<span lang=EN-US> <br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">WHERE last_name &gt;= &#8217;Mac&#8217; AND last_name &lt; &#8217;Mad&#8217; <br><br><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这种优化不能应用于使用了<span lang=EN-US>REGEXP</span>操作符的模式匹配。<span lang=EN-US>REGEXP</span>表达式永远不会被优化。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">帮助优化器更好的判断索引的效率。在默认情况下，当你把索引列的值与常量进行比较的 时候，优化器会假设键值在索引内部是均匀分布的。在决定进行常量比较是否使用索引的时候，优化器会快速地检查索引，估计出会用到多少个实体（<span lang=EN-US>entry</span>）。对应<span lang=EN-US>MyISAM</span>、<span lang=EN-US>InnoDB</span>和<span lang=EN-US>BDB</span>数据表来说，你可以使用<span lang=EN-US>ANALYZE TABLE</span>让服务器执行对键值的分析。它会为优化器提供更好的信息。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">使用<span lang=EN-US>EXPLAIN</span>验证优化器的操作。<span lang=EN-US>EXPLAIN</span>语句可以告诉你是否使用了索引。当你试图用另外的方式编写语句或检查添加索引是否会提高查询执行效率的时候，这些信息对你是有帮助的。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在必要的时候给优化器一些提示。正常情况下，<span lang=EN-US>MySQL</span>优化器自由地决定扫描数据表的次序来最快地检索数据行。在有些场合中优化器没有作出最佳选择。如果你察觉这种现象发生了，就可以使用<span lang=EN-US>STRAIGHT_JOIN</span>关键字来重载优化器的选择。带有<span lang=EN-US>STRAIGHT_JOIN</span>的联结类似于交叉联结，但是强迫数据表按照<span lang=EN-US>FROM</span>子句中指定的次序来联结。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在<span lang=EN-US>SELECT</span>语句中有两个地方可以指定<span lang=EN-US>STRAIGHT_JOIN</span>。你可以在<span lang=EN-US>SELECT</span>关键字和选择列表之间的位置指定，这样会对语句中所有的交叉联结产生影响；你也可以在<span lang=EN-US>FROM</span>子句中指定。下面的两个语句功能相同：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT STRAIGHT_JOIN ... FROM t1, t2, t3 ... ; <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT ... FROM t1 STRAIGHT_JOIN t2 STRAIGHT_JOIN t3 ... ;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">分别在带有<span lang=EN-US>STRAIGHT_JOIN</span>和不带<span lang=EN-US>STRAIGHT_JOIN</span>的情况下运行这个查询；<span lang=EN-US>MySQL</span>可能因为什么原因没有按照你认为最好的次序使用索引（你可以使用<span lang=EN-US>EXPLAIN</span>来检查<span lang=EN-US>MySQL</span>处理每个语句的执行计划）。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">你还可以使用<span lang=EN-US>FORCE INDEX</span>、<span lang=EN-US>USE INDEX</span>或<span lang=EN-US>IGNORE INDEX</span>来指导服务器如何使用索引。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">利用优化器更加完善的区域。<span lang=EN-US>MySQL</span>可以执行联结和子查询，但是子查询是最近才支持的，是在<span lang=EN-US>MySQL 4.1</span>中添加的。因而在很多情况下，优化器对联结操作的调整比对子查询的调整要好一些。当你的子查询执行地很慢的时候，这就是一条实际的提示。有一些子查询可以使用逻辑上相等的联结来重新表达。在可行的情况下，你可以把子查询重新改写为联结，看是否执行地快一些。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">测试查询的备用形式，多次运行。当你测试查询的备用形式的时候（例如，子查询与等同 的联结操作对比），每种方式都应该多次运行。如果两种形式都只运行了一次，那么你通常会发现第二个查询比第一个快，这是因为第一个查询得到的信息仍然保留在缓存中，以至于第二个查询没有真正地从磁盘上读取数据。你还应该在系统负载相对平稳的时候运行查询，以避免系统中其它的事务影响结果。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">避免过度地使用<span lang=EN-US>MySQL</span>自动类型转换。<span lang=EN-US>MySQL</span>会执行自动的类型转换，但是如果你能够避免这种转换操作，你得到的性能就更好了。例如，如果<span lang=EN-US>num_col</span>是整型数据列，那么下面这些查询将返回相同的结果：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT * FROM mytbl WHERE num_col = 4; <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SELECT * FROM mytbl WHERE num_col = &#8217;<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="4" UnitName="&#8217;">4&#8217;</st1:chmetcnv>;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">但是第二个查询涉及到了类型转换。转换操作本身为了把整型和字符串型转换为双精度型进行比较，使性能恶化了。更严重的情况是，如果<span lang=EN-US>num_col</span>是索引的，那么涉及到类型转换的比较操作不会使用索引。<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.phpweblog.net/kiyone/aggbug/5699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/kiyone/" target="_blank">鱼有所思</a> 2008-09-02 16:01 <a href="http://www.phpweblog.net/kiyone/archive/2008/09/02/5699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何编写高质量、高性能的MySQL语法</title><link>http://www.phpweblog.net/kiyone/archive/2008/09/02/5698.html</link><dc:creator>鱼有所思</dc:creator><author>鱼有所思</author><pubDate>Tue, 02 Sep 2008 07:30:00 GMT</pubDate><guid>http://www.phpweblog.net/kiyone/archive/2008/09/02/5698.html</guid><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何编写高质量、高性能的</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt">MySQL</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语法<br><br></span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在应用系统开发初期，由于开发数据库数据比较少，对于查询<span lang=EN-US>SQL</span>语句，复杂视图的的编写等体会不出<span lang=EN-US>SQL</span>语句各种写法的性能优劣，但是如果将应用系统提交实际应用后，随着数据库中数据的增加，系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是<span lang=EN-US>SQL</span>语句的优化。对于海量数据，劣质<span lang=EN-US>SQL</span>语句和优质<span lang=EN-US>SQL</span>语句之间的速度差别可以达到上百倍，可见对于一个系统 不是简单地能实现其功能就可，而是要写出高质量的<span lang=EN-US>SQL</span>语句，提高系统的可用性。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在多数情况下，<span lang=EN-US>Oracle</span>使用索引来更快地遍历表，优化器主要根据定义的索引来提高性能。但是，如果在<span lang=EN-US>SQL</span>语句的<span lang=EN-US>where</span>子句中写的<span lang=EN-US>SQL</span>代码不合理，就会造成优化器删去索引而使用全表扫描，一般就这种<span lang=EN-US>SQL</span>语句就是所谓的劣质<span lang=EN-US>SQL</span>语句。在编写<span lang=EN-US>SQL</span>语句时我们应清楚优化器根据何种原则来删除索引，这有助于写出高性能的<span lang=EN-US>SQL</span>语句。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><strong><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">SQL</span></strong><strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">语句编写注意问题 <br><br></span></strong><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">下面就某些<span lang=EN-US>SQL</span>语句的<span lang=EN-US>where</span>子句编写中需要注意的问题作详细介绍。在这些<span lang=EN-US>where</span>子句中，即使某些列存在索引，但是由于编写了劣质的<span lang=EN-US>SQL</span>，系统在运行该<span lang=EN-US>SQL</span>语句时也不能使用该索引，而同样使用全表扫描，这就造成了响应速度的极大降低。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">1. IS NULL </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">与<span lang=EN-US> IS NOT NULL <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">不能用<span lang=EN-US>null</span>作索引，任何包含<span lang=EN-US>null</span>值的列都将不会被包含在索引中。即使索引有多列这样的情况下，只要这些列中有一列含有<span lang=EN-US>null</span>，该列就会从索引中排除。也就是说如果某列存在空值，即使对该列建索引也不会提高性能。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">任何在<span lang=EN-US>where</span>子句中使用<span lang=EN-US>is null</span>或<span lang=EN-US>is not null</span>的语句优化器是不允许使用索引的。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">2. </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">联接列<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">对于有联接的列，即使最后的联接值为一个静态值，优化器是不会使用索引的。我们一起 来看一个例子，假定有一个职工表（<span lang=EN-US>employee</span>），对于一个职工的姓和名分成两列存放（<span lang=EN-US>FIRST_NAME</span>和<span lang=EN-US>LAST_NAME</span>），现在要查询一个 叫比尔<span lang=EN-US>.</span>克林顿（<span lang=EN-US>Bill Cliton</span>）的职工。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">下面是一个采用联接查询的<span lang=EN-US>SQL</span>语句，<span lang=EN-US> <o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select * from employss <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">where <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">first_name||''||last_name ='Beill Cliton'<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">上面这条语句完全可以查询出是否有<span lang=EN-US>Bill Cliton</span>这个员工，但是这里需要注意，系统优化器对基于<span lang=EN-US>last_name</span>创建的索引没有使用。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">当采用下面这种<span lang=EN-US>SQL</span>语句的编写，<span lang=EN-US>Oracle</span>系统就可以采用基于<span lang=EN-US>last_name</span>创建的索引。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Select * from employee <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">where <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">first_name ='Beill' and last_name ='Cliton'<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">遇到下面这种情况又如何处理呢？如果一个变量（<span lang=EN-US>name</span>）中存放着<span lang=EN-US>Bill Cliton</span>这个员工的姓名，对于这种情况我们又如何避免全程遍历，使用索引呢？可以使用一个函数，将变量<span lang=EN-US>name</span>中的姓和名分开就可以了，但是有一点需 要注意，这个函数是不能作用在索引列上。下面是<span lang=EN-US>SQL</span>查询脚本：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select * from employee <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">where <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">first_name = SUBSTR('&amp;&amp;name',1,INSTR('&amp;&amp;name',' ')-1) <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">and <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">last_name = SUBSTR('&amp;&amp;name',INSTR('&amp;&amp;name&#8217;,' ')+1)<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">3. </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">带通配符（<span lang=EN-US>%</span>）的<span lang=EN-US>like</span>语句<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">同样以上面的例子来看这种情况。目前的需求是这样的，要求在职工表中查询名字中包含<span lang=EN-US>cliton</span>的人。可以采用如下的查询<span lang=EN-US>SQL</span>语句：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select * from employee where last_name like '%cliton%'<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这里由于通配符（<span lang=EN-US>%</span>）在搜寻词首出现，所以<span lang=EN-US>Oracle</span>系统不使用<span lang=EN-US>last_name</span>的索 引。在很多情况下可能无法避免这种情况，但是一定要心中有底，通配符如此使用会降低查询速度。然而当通配符出现在字符串其他位置时，优化器就能利用索引。在下面的查询中索引得到了使用：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select * from employee where last_name like 'c%'<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">4. Order by</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">语句<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">ORDER BY</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">语句决定了<span lang=EN-US>Oracle</span>如何将返回的查询结果排序。<span lang=EN-US>Order by</span>语句对要排序的列没有什么特别的限制，也可以将函数加入列中（象联接或者附加等）。任何在<span lang=EN-US>Order by</span>语句的非索引项或者有计算表达式都将降低查询速度。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">仔细检查<span lang=EN-US>order by</span>语句以找出非索引项或者表达式，它们会降低性能。解决这个问题的办法就是重写<span lang=EN-US>order by</span>语句以使用索引，也可以为所使用的列建立另外一个索引，同时应绝对避免在<span lang=EN-US>order by</span>子句中使用表达式。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">5. NOT <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">我们在查询时经常在<span lang=EN-US>where</span>子句使用一些逻辑表达式，如大于、小于、等于以及不等于等等，也可以使用<span lang=EN-US>and</span>（与）、<span lang=EN-US>or</span>（或）以及<span lang=EN-US>not</span>（非）。<span lang=EN-US>NOT</span>可用来对任何逻辑运算符号取反。下面是一个<span lang=EN-US>NOT</span>子句的例子：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">... where not (status ='VALID')<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">如果要使用<span lang=EN-US>NOT</span>，则应在取反的短语前面加上括号，并在短语前面加上<span lang=EN-US>NOT</span>运算符。<span lang=EN-US>NOT</span>运算符包含在另外一个逻辑运算符中，这就是不等于（<span lang=EN-US>&lt;&gt;</span>）运算符。换句话说，即使不在查询<span lang=EN-US>where</span>子句中显式地加入<span lang=EN-US>NOT</span>词，<span lang=EN-US>NOT</span>仍在运算符中，见下例：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">... where status &lt;&gt;'INVALID'<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">再看下面这个例子：<span lang=EN-US> <o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select * from employee where salary&lt;&gt;3000;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">对这个查询，可以改写为不使用<span lang=EN-US>NOT</span>：<span lang=EN-US> <o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">select * from employee where salary&lt;3000 or salary&gt;3000;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">虽然这两种查询的结果一样，但是第二种查询方案会比第一种查询方案更快些。第二种查询允许<span lang=EN-US>Oracle</span>对<span lang=EN-US>salary</span>列使用索引，而第一种查询则不能使用索引。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">6. IN</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">和<span lang=EN-US>EXISTS <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">有时候会将一列和一系列值相比较。最简单的办法就是在<span lang=EN-US>where</span>子句中使用子查询。在<span lang=EN-US>where</span>子句中可以使用两种格式的子查询。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">第一种格式是使用<span lang=EN-US>IN</span>操作符：<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">... where column in(select * from ... where ...);<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">第二种格式是使用<span lang=EN-US>EXIST</span>操作符：<span lang=EN-US> <o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">... where exists (select 'X' from ...where ...);<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">我相信绝大多数人会使用第一种格式，因为它比较容易编写，而实际上第二种格式要远比第一种格式的效率高。在<span lang=EN-US>Oracle</span>中可以几乎将所有的<span lang=EN-US>IN</span>操作符子查询改写为使用<span lang=EN-US>EXISTS</span>的子查询。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">第二种格式中，子查询以<span lang=EN-US>&#8216;select 'X'</span>开始。运用<span lang=EN-US>EXISTS</span>子句不管子查询从表中抽取什么数据它只查看<span lang=EN-US>where</span>子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作（这里假定在<span lang=EN-US>where</span>语句中使用的列存在索引）。相对于<span lang=EN-US>IN</span>子句来说，<span lang=EN-US>EXISTS</span>使用相连子查询，构造起来要比<span lang=EN-US>IN</span>子查询困难一些。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">通过使用<span lang=EN-US>EXIST</span>，<span lang=EN-US>Oracle</span>系统会首先检查主查询，然后运行子查询直到它找到第一个匹配项，这就节省了时间。<span lang=EN-US>Oracle</span>系统在执行<span lang=EN-US>IN</span>子查询时，首先执行子查询，并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前，系统先将主查询挂起，待子查询执行完毕，存放在临时表中以后再执行主查询。这也就是使用<span lang=EN-US>EXISTS</span>比使用<span lang=EN-US>IN</span>通常查询速度快的原因。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">同时应尽可能使用<span lang=EN-US>NOT EXISTS</span>来代替<span lang=EN-US>NOT IN</span>，尽管二者都使用了<span lang=EN-US>NOT</span>（不能使用索引而降低速度），<span lang=EN-US>NOT EXISTS</span>要比<span lang=EN-US>NOT IN</span>查询效率更高。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.phpweblog.net/kiyone/aggbug/5698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/kiyone/" target="_blank">鱼有所思</a> 2008-09-02 15:30 <a href="http://www.phpweblog.net/kiyone/archive/2008/09/02/5698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于MySQL数据库的存储引擎详细介绍</title><link>http://www.phpweblog.net/kiyone/archive/2008/09/02/5697.html</link><dc:creator>鱼有所思</dc:creator><author>鱼有所思</author><pubDate>Tue, 02 Sep 2008 07:25:00 GMT</pubDate><guid>http://www.phpweblog.net/kiyone/archive/2008/09/02/5697.html</guid><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt">MySQL</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库的存储引擎详细介绍</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">存储引擎是什么？</span></strong><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">MySQL</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">中的数据用各种不同的技术存储在文件<span lang=EN-US>(</span>或者内存<span lang=EN-US>)</span>中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术，你能够获得额外的速度或者功能，从而改善你的应用的整体功能。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">例如，如果你在研究大量的临时数据，你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者，你也许需要一个支持事务处理的数据库<span lang=EN-US>(</span>以确保事务处理不成功时数据的回退能力<span lang=EN-US>)</span>。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这些不同的技术以及配套的相关功能在<span lang=EN-US>MySQL</span>中被称作存储引擎<span lang=EN-US>(</span>也称作表类型<span lang=EN-US>)</span>。<span lang=EN-US> MySQL</span>默认配置了许多不同的存储引擎，可以预先设置或者在<span lang=EN-US>MySQL</span>服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎，以便在选择如何 存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">选择如何存储和检索你的数据的这种灵活性是<span lang=EN-US>MySQL</span>为什么如此受欢迎的主要原因。其它数据库系统<span lang=EN-US>(</span>包括大多数商业选择<span lang=EN-US>)</span>仅支持一种类型的数据存储。遗憾的是，其它类型的数据库解决方案采取的<span lang=EN-US>&#8220;</span>一个尺码满足一切需求<span lang=EN-US>&#8221;</span>的方式意味着你 要么就牺牲一些性能，要么你就用几个小时甚至几天的时间详细调整你的数据库。使用<span lang=EN-US>MySQL</span>，我们仅需要修改我们使用的存储引擎就可以了。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在这篇文章中，我们不准备集中讨论不同的存储引擎的技术方面的问题<span lang=EN-US>(</span>尽管我们不可避免地要研究这些因素的某些方面<span lang=EN-US>)</span>，相反，我们将集中介绍这些不同的引擎分别最适应哪种需求和如何启用不同的存储引擎。为了实现这个目的，在介绍每一个存储引擎的具体情况之前，我们必须要了解一些基本的问题。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">如何确定有哪些存储引擎可用</span></strong><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">你可以在<span lang=EN-US>MySQL(</span>假设是<span lang=EN-US>MySQL</span>服务器<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899"><span lang=EN-US>4.1.2</span></st1:chsdate>以上版本<span lang=EN-US>)</span>中使用显示引擎的命令得到一个可用引擎的列表。<span lang=EN-US> <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mysql&gt; show engines;<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">+------------+---------+----------------------------------------------------+<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| Engine | Support | Comment |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">+------------+---------+-----------------------------------------------------+<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| HEAP | YES | Alias for MEMORY |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| MERGE | YES | Collection of identical MyISAM tables |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| MRG_MYISAM | YES | Alias for MERGE |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| ISAM | NO | Obsolete storage engine, now replaced by MyISAM |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| MRG_ISAM | NO | Obsolete storage engine, now replaced by MERGE |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| InnoDB | YES | Supports transactions, row-level locking, and foreign keys |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| INNOBASE | YES | Alias for INNODB |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| BDB | NO | Supports transactions and page-level locking |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| BERKELEYDB | NO | Alias for BDB |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| NDBCLUSTER | NO | Clustered, fault-tolerant, memory-based tables |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| NDB | NO | Alias for NDBCLUSTER |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| EXAMPLE | NO | Example storage engine |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| ARCHIVE | NO | Archive storage engine |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| CSV | NO | CSV storage engine |<o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">+------------+---------+-------------------------------------------------------+<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">16 rows in set (0.01 sec) </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　这个表格显示了可用的数据库引擎的全部名单以及在当前的数据库服务器中是否支持这些引擎。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">对于<span lang=EN-US>MySQL <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">4.1.2</st1:chsdate></span>以前版本，可以使用<span lang=EN-US>mysql&gt; show variables like "have_%"(</span>显示类似<span lang=EN-US>&#8220;have_%&#8221;</span>的变量<span lang=EN-US>): <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">mysql&gt; show variables like "have_%"; <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">+------------------+----------+ <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| Variable_name | Value | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">+------------------+----------+ <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_bdb | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_crypt | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_innodb | DISABLED | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_isam | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_raid | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_symlink | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_openssl | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">| have_query_cache | YES | <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">+------------------+----------+ <o:p></o:p></span></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">8 rows in set (0.01 sec)<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">你可以通过修改设置脚本中的选项来设置在<span lang=EN-US>MySQL</span>安装软件中可用的引擎。如果你在使用一个预先包装好的<span lang=EN-US>MySQL</span>二进制发布版软件，那么，这个软件就包含了常用的引擎。然而，需要指出的是，如果你要使用某些不常用的引擎，特别是<span lang=EN-US>CSV</span>、<span lang=EN-US> RCHIVE(</span>存档<span lang=EN-US>)</span>和<span lang=EN-US>BLACKHOLE(</span>黑洞<span lang=EN-US>)</span>引擎，你就需要手工重新编译<span lang=EN-US>MySQL</span>源码 。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">使用一个指定的存储引擎</span></strong><span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">你可以使用很多方法指定一个要使用的存储引擎。最简单的方法是，如果你喜欢一种能满 足你的大多数数据库需求的存储引擎，你可以在<span lang=EN-US>MySQL</span>设置文件中设置一个默认的引擎类型（使用<span lang=EN-US>storage_engine </span>选项）或者在启动数据库服务器时在命令行后面加上<span lang=EN-US>--default-storage-engine</span>或<span lang=EN-US>--default-table-type</span>选项。<span lang=EN-US> <o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">更灵活的方式是在随<span lang=EN-US>MySQL</span>服务器发布同时提供的<span lang=EN-US>MySQL</span>客户端时指定使用的存储引擎。最直接的方式是在创建表时指定存储引擎的类型，向下面这样<span lang=EN-US>: <o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　<span lang=EN-US>CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB<o:p></o:p></span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">你还可以改变现有的表使用的存储引擎，用以下语句<span lang=EN-US>: <br><br><o:p></o:p></span></span></p>
<div align=center>
<table class=MsoNormalTable style="WIDTH: 300pt; mso-cellspacing: 0cm; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 1.5pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #ebe9ed">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　　<span lang=EN-US>ALTER TABLE mytable ENGINE = MyISAM<o:p></o:p></span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">然而，你在以这种方式修改表格类型的时候需要非常仔细，因为对不支持同样的索引、字段类型或 者表大小的一个类型进行修改可能使你丢失数据。如果你指定一个在你的当前的数据库中不存在的一个存储引擎，那么就会创建一个<span lang=EN-US>MyISAM(</span>默认的<span lang=EN-US>)</span>类型的 表。<span lang=EN-US> <o:p></o:p></span></span></p>
<p style="TEXT-INDENT: 24pt"><font face=宋体><strong><span style="FONT-SIZE: 10.5pt">各存储引擎之间的区别</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"> <o:p></o:p></span></font></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>为了做出选择哪一个存储引擎的决定，我们首先需要考虑每一个存储引擎提供了哪些不同的核心功能。这种功能使我们能够把不同的存储引擎区别开来。我们一般把这些核心功能分为四类<span lang=EN-US>:</span>支持的字段和数据类型、锁定类型、索引和处理。一些引擎具有能过促使你做出决定的独特的功能，我们一会儿再仔细研究这些具体问题。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><font face=宋体><strong><span style="FONT-SIZE: 10.5pt">字段和数据类型</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"> <o:p></o:p></span></font></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>虽然所有这些引擎都支持通用的数据类型，例如整型、实型和字符型等，但是，并不是所有的引擎都支持其它的字段类型，特别是<span lang=EN-US>BLOG</span>（二进制大对象）或者<span lang=EN-US>TEXT</span>文本类型。其它引擎也许仅支持有限的字符宽度和数据大小。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>这些局限性可能直接影响到你可以存储的数据，同时也可能会对你实施的搜索的类型或者你对那些信息创建的索引产生间接的影响。这些区别能够影响你的应用程序的性能和功能，因为你必须要根据你要存储的数据类型选择对需要的存储引擎的功能做出决策。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><font face=宋体><strong><span style="FONT-SIZE: 10.5pt">锁定</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"> <o:p></o:p></span></font></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>数据库引擎中的锁定功能决定了如何管理信息的访问和更新。当数据库中的一个对象为信息更新锁定了，在更新完成之前，其它处理不能修改这个数据<span lang=EN-US>(</span>在某些情况下还不允许读这种数据<span lang=EN-US>)</span>。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>锁定不仅影响许多不同的应用程序如何更新数据库中的信息，而且还影响对那个数据的查询。这是因为查询可能要访问正在被修改或者更新的数据。总的来说，这种延迟是很小的。大多数锁定机制主要是为了防止多个处理更新同一个数据。由于向数据中 插入信息和更新信息这两种情况都需要锁定，你可以想象，多个应用程序使用同一个数据库可能会有很大的影响。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>不同的存储引擎在不同的对象级别支持锁定，而且这些级别将影响可以同时访问的信息。得到支持的级别有三种<span lang=EN-US>:</span>表锁定、块锁定和行锁定。支持最多的是表锁定，这种锁定是在<span lang=EN-US>MyISAM</span>中提供的。在数据更新时，它锁定了整个表。这就防止了 许多应用程序同时更新一个具体的表。这对应用很多的多用户数据库有很大的影响，因为它延迟了更新的过程。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>页级锁定使用<span lang=EN-US>Berkeley DB</span>引擎，并且根据上载的信息页<span lang=EN-US>(8KB)</span>锁定数据。当在数据库的很多地方进行更新的时候，这种锁定不会出现什么问题。但是，由于增加几行信息就要锁定数据结构的最后<span lang=EN-US>8KB</span>，当需要增加大量的行，也别是大量的小型数据，就会带来问题。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>行级锁定提供了最佳的并行访问功能，一个表中只有一行数据被锁定。这就意味着很多应用程序能够更新同一个表中的不同行的数据，而不会引起锁定的问题。只有<span lang=EN-US>InnoDB</span>存储引擎支持行级锁定。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><font face=宋体><strong><span style="FONT-SIZE: 10.5pt">建立索引</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"> <o:p></o:p></span></font></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>建立索引在搜索和恢复数据库中的数据的时候能够显著提高性能。不同的存储引擎提供不同的制作索引的技术。有些技术也许会更适合你存储的数据类型。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>有些存储引擎根本就不支持索引，其原因可能是它们使用基本表索引<span lang=EN-US>(</span>如<span lang=EN-US>MERGE</span>引擎<span lang=EN-US>)</span>或者是因为数据存储的方式不允许索引<span lang=EN-US>(</span>例如<span lang=EN-US>FEDERATED</span>或者<span lang=EN-US>BLACKHOLE</span>引擎<span lang=EN-US>)</span>。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p style="TEXT-INDENT: 24pt"><font face=宋体><strong><span style="FONT-SIZE: 10.5pt">事务处理</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"> <o:p></o:p></span></font></p>
<p style="TEXT-INDENT: 24pt"><span style="FONT-SIZE: 10.5pt"><font face=宋体>事务处理功能通过提供在向表中更新和插入信息期间的可靠性。这种可靠性是通过如下方法实现的，它允许你更新表中的数据，但仅当应用的应用程序的所有相关操作完全完成后才接受你对表的更改。例如，在会计处理中每一笔会计分录处理将包括对借 方科目和贷方科目数据的更改，你需要要使用事务处理功能保证对借方科目和贷方科目的数据更改都顺利完成，才接受所做的修改。如果任一项操作失败了，你都可以取消这个事务处理，这些修改就不存在了。如果这个事务处理过程完成了，我们可以通过允许这个修改来确认这个操作。<span lang=EN-US> <o:p></o:p></span></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.phpweblog.net/kiyone/aggbug/5697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/kiyone/" target="_blank">鱼有所思</a> 2008-09-02 15:25 <a href="http://www.phpweblog.net/kiyone/archive/2008/09/02/5697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL优化全攻略-相关数据库命令</title><link>http://www.phpweblog.net/kiyone/archive/2008/09/02/5696.html</link><dc:creator>鱼有所思</dc:creator><author>鱼有所思</author><pubDate>Tue, 02 Sep 2008 07:21:00 GMT</pubDate><guid>http://www.phpweblog.net/kiyone/archive/2008/09/02/5696.html</guid><wfw:comment>http://www.phpweblog.net/kiyone/comments/5696.html</wfw:comment><comments>http://www.phpweblog.net/kiyone/archive/2008/09/02/5696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/kiyone/comments/commentRss/5696.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/kiyone/services/trackbacks/5696.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong><span>MySQL</span></strong><strong><span>优化全攻略</span></strong><strong><span>-</span></strong><strong><span>相关数据库命令</span></strong><strong></strong></p>
<p align=left><span>我们讨论的是数据库性能优化的另一方面，即运用数据库服务器内建的工具辅助性能分析和优化。<span> </span></span></p>
<p align=left><strong><span>▲ SHOW </span></strong></p>
<p align=left><span>执行下面这个命令可以了解服务器的运行状态：<span>mysql &gt;show status; </span></span></p>
<p align=left><span>该命令将显示出一长列状态变量及其对应的值，其中包括：被中止访问的用户数量，被中止的连接数量，尝试连接的次数，并发连接数量最大值，以及其他许多有用的信息。这些信息对于确定系统问题和效率低下的原因是十分有用的。<span> </span></span></p>
<p align=left><span>SHOW</span><span>命令除了能够显示出<span>MySQL</span>服务器整体状态信息之外，它还能够显示出有关日志文件、指定数据库、表、索引、进程和许可权限表的宝贵信息。<span> </span></span></p>
<p align=left><strong><span>▲ EXPLAIN </span></strong></p>
<p align=left><span>EXPLAIN</span><span>能够分析<span>SELECT</span>命令的处理过程。这不仅对于决定是否要为表加上索引很有用，而且对于了解<span>MySQL</span>处理复杂连接的过程也很有用。<span> </span></span></p>
<p align=left><span>下面这个例子显示了如何用<span>EXPLAIN</span>提供的信息逐步地优化连接查询。（本例来自<span>MySQL</span>文档，见<span>http://www.mysql.com/doc/E/X/EXPLAIN.html</span>。原文写到这里似乎有点潦草了事，特加上此例。）<span> </span></span></p>
<p align=left><span>假定用<span>EXPLAIN</span>分析的<span>SELECT</span>命令如下所示：<span> </span></span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td style="BACKGROUND-COLOR: #c0c0c0">
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>EXPLAIN SELECT tt.TicketNumber, tt.TimeIn, </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt.ProjectReference, tt.EstimatedShipDate, </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt.ActualShipDate, tt.ClientID, </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt.ServiceCodes, tt.RepetitiveID, </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt.CurrentProcess, tt.CurrentDPPerson, </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt.RecordVolume, tt.DPPrinted, et.COUNTRY, </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; et_1.COUNTRY, do.CUSTNAME </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp; FROM tt, et, et AS et_1, do </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp; WHERE tt.SubmitTime IS NULL </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND tt.ActualPC = et.EMPLOYID </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND tt.AssignedPC = et_1.EMPLOYID </p>
            <p style="BACKGROUND-COLOR: #c0c0c0" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND tt.ClientID = do.CUSTNMBR;</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>SELECT</span><span>命令中出现的表定义如下：<span> </span></span></p>
<p align=left><span>表定义 </span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td style="BACKGROUND-COLOR: #c0c0c0">
            <p align=left><span>表<span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>列<span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>列类型<span>&nbsp;</span></span></p>
            <p align=left><span>tt<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ActualPC<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CHAR(10)&nbsp;</span></p>
            <p align=left><span>tt<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AssignedPC<span>&nbsp;&nbsp;&nbsp; </span>CHAR(10)&nbsp;</span></p>
            <p align=left><span>tt<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ClientID<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CHAR(10)&nbsp;</span></p>
            <p align=left><span>et<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>EMPLOYID<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CHAR(15)&nbsp;</span></p>
            <p align=left><span>do<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CUSTNMBR<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CHAR(15)</span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p align=left><span>索引<span> </span></span></p>
<div align=center>
<table cellSpacing=0 cellPadding=0 width=400 border=1>
    <tbody>
        <tr>
            <td style="BACKGROUND-COLOR: #c0c0c0">
            <p align=left><span>表<span>&nbsp;</span>索引<span>&nbsp;</span></span></p>
            <p align=left><span>tt&nbsp;ActualPC&nbsp;</span></p>
            <p align=left><span>tt&nbsp;AssignedPC &nbsp;</span></p>
            <p align=left><span>tt&nbsp;ClientID&nbsp;</span></p>
            <p align=left><span>et&nbsp;EMPLOYID (</span><span>主键<span>)&nbsp;</span></span></p>
            <p align=left><span>do&nbsp;CUSTNMBR (</span><span>主键<span>)</span></span></p>
            </td>
      