﻿<?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>BlogJava-志当存高远,功到自然成!-随笔分类-SQL_Server</title><link>http://www.blogjava.net/shanben/category/32845.html</link><description>少年强则中国强,少年进步则中国进步!</description><language>zh-cn</language><lastBuildDate>Tue, 08 Jul 2008 02:14:03 GMT</lastBuildDate><pubDate>Tue, 08 Jul 2008 02:14:03 GMT</pubDate><ttl>60</ttl><item><title>聚簇索引和非聚簇索引</title><link>http://www.blogjava.net/shanben/archive/2008/07/08/213227.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Tue, 08 Jul 2008 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/shanben/archive/2008/07/08/213227.html</guid><wfw:comment>http://www.blogjava.net/shanben/comments/213227.html</wfw:comment><comments>http://www.blogjava.net/shanben/archive/2008/07/08/213227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shanben/comments/commentRss/213227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shanben/services/trackbacks/213227.html</trackback:ping><description><![CDATA[<p><span>聚簇索引和非聚簇索引都是为了增加数据检索速度而存在的</span><span>.</span></p>
<p><span>在配置上，</span> <span>每个表只能有一个聚簇索引，而能有</span><span>200</span><span>多个非聚簇索引。</span></p>
<p><span>在物理分配上，</span> <span>每个表的数据都是分配在页上，一个页大概有</span><span>8k</span><span>左右，假设一条数据占</span><span>1000</span><span>字节的话，那么</span><span>8000</span><span>条数据占</span><span>8000*1k/8k = 1000</span><span>页面，这些数据存在于数据块中。</span></p>
<p><span>如果对这些数据中的某一</span><span>10</span><span>字节的字段做<span>聚簇</span>索引的话，</span><span>8000 * 0.01K /8 = 10 </span><span>页面，那么</span><span>10</span><span>页面作为存储这些索引而存在。并存放于索引块</span><span><span>&nbsp;&nbsp; </span></span></p>
<p><span>如果对这些数据中的某一</span><span>10</span><span>字节的字段做<span>非聚簇</span>索引的话，</span><span>2 * 8000 * 0.01K /8 = 20 </span><span>页面，那么</span><span>20</span><span>页面作为存储这些索引而存在。并存放于索引块。乘</span><span>2 </span><span>的原因请看以下叙述。</span></p>
<p><span>在功能上，</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>聚簇</span><span>索引后，数据按照索引的顺序来排序，所以索引所指向的就是数据层里对应的相关数据。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>非聚簇</span><span>索引后，数据不会按照索引的顺序来排序，所以数据库会先按字理或逻辑先生成首层索引，</span> <span>再根据首层索引生成第二层索引，第二层索引</span></p>
<p><span>所指向的才是数据层里对应的相关数据。</span></p>
<p><span>在性能上，</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>聚簇索引</span><span>在大多数的情况下对该索引的查询操作性能是最好的，查询先通过索引层（按上述的例子中，最多需要搜索</span><span>10</span><span>页）找到对应数据存在位置，就算是多条符合记录的数据，也是在旁边的数据位置中就能找到</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>非聚簇索引</span><span>在大多数的情况下对该索引的查询操作性能比<span>聚簇索引</span><span>稍次</span>，查询也先通过首层索引（按上述的例子中，最多搜索</span><span>10</span><span>页）找到对应第二层索引存在位置，由第二层索引层再找到数据的物理位置。</span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>索引虽然可以增加查询速度，但也有以下缺陷，需要在设置时注意</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>占用空间，虽然索引块增长速度不如数据块那么急剧，但毕竟也是消耗空间的。</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span>select * </span><span>的访问语句时，</span> <span>数据库会先搜索<span>聚簇和非聚簇索引</span>的索引块的索引，再搜索数据块，这种情况下表里完全不设索引的性能高于设了<span>聚簇索引</span><span>的性能（按上例要额外搜索</span></span><span>10</span><span>个页），设了</span><span>聚簇</span><span>的性能比设</span><span>非聚簇</span><span>的要好（按上例</span><span>非聚簇</span><span>要额外搜索</span><span>20</span><span>个页）</span></p>
<p><img height="304" alt="" src="http://www.cnblogs.com/images/cnblogs_com/mattcoder/ClusteredIndex.GIF" width="672" border="0" /><img height="313" alt="" src="http://www.cnblogs.com/images/cnblogs_com/mattcoder/ClusteredIndex1.GIF" width="674" border="0" /><br />
</p>
 <img src ="http://www.blogjava.net/shanben/aggbug/213227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-08 09:57 <a href="http://www.blogjava.net/shanben/archive/2008/07/08/213227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>