<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="【转】如何为表建立索引？" id="card1">
<p> 游客</p><p>
标题:【转】如何为表建立索引？<br/>
正文:<br/>
1.缺省情况下建立的索引是非聚集索引，但有时它并不是最佳的；合理的索引设计要建立在对各种查询的分析和预测上。一般来说：有大量重复值、且经常有范围查询（between, &amp;gt;,&amp;lt; ，&amp;gt;=,&amp;lt; =）和order by、group by发生的列，考虑建立聚集索引；经 常同时存取多列，且每列都含有重复值可考虑建立组合索引；在条件表达式中经常用到的不同值较多的列上建立检索，在不同值少的列上不要建立索引。比如在雇员 表的&amp;ldquo;性别&amp;rdquo;列上只有&amp;ldquo;男&amp;rdquo;与&amp;ldquo;女&amp;rdquo;两个不同值，因此就无必要建立索引。如果建立索引不但不会提高查询效率，反而会严重降低更新速度。组合索引要尽量使关键查询形成索引覆盖，其前导列一定是使用最频繁的列。2 避免使用不兼容的数据类型：例如float和INt、char和varchar、bINary和varbINary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如:SELECT name FROM employee WHERE salary ＞ 60000在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。3 IS NULL 与IS NOT NULL：不 能用null作索引，任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下，只要这些列中有一列含有null，该列就会从索引中排 除。也就是说如果某列存在空值，即使对该列建索引也不会提高性能。任何在WHERE子句中使用is null或is not null的语句优化器是不允 许使用索引的。4 IN和EXISTS：EXISTS要远比IN的效率高。里面关系到full table scan和range scan。几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。例子：语句1SELECT dname, deptno FROM deptWHERE deptno NOT IN(SELECT deptno FROM emp);语句2SELECT dname, deptno FROM deptWHERE NOT EXISTS(SELECT deptno FROM empWHERE de<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=241&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=241&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=241&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=241&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=241">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=241">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>