|
最初由 beginner_bj 发布
[B]1、APL表的聚簇索引保证 数据的排列是按照索引的顺序来排列_
——APL表的聚簇索引只保证同一页上数据的排列是按照索引的顺序来排列,数据若分布在多个页上,是肯定不保证按顺序排列的。
APL表的组织就象一个链表,在表的多个页之间通过页链来连接,你所说的"数据若分布在多个页上,是肯定不保证按顺序排列的",这个顺序是指什么顺序?如果是说物理磁盘的存储顺序,那肯定不是按顺序排列的(但是这个顺序和我们讨论的聚簇索引的顺序有关系吗?),但是如果这个顺序是指聚簇索引的顺序,那肯定是按这个顺序排列的。
In clustered indexes on allpages-locked tables, leaf-level pages are also the
data pages, and all rows are kept in physical order by the keys.
Physical ordering means that:
• All entries on a data page are in index key order.
• By following the “next page” pointers on the data pages, Adaptive Server
reads the entire table in index key order.
[/COLOR]
2、DOL表上的聚簇索引不保证 数据的排列是按照索引的顺序来排列(不管是不是做了reorg)
——你可以看看reorg rebuild
reorg rebuild完成后的瞬间(在没有数据修改之前),数据的确是按照索引顺序排列,这种状态在生产环境能保持多久?但是一旦有一条修改语句发生,DOL上的聚簇索引不保证数据的排列顺序是聚簇索引的顺序。 而APL表上的聚簇索引是严格保证这一顺序的,不管发生多少的数据修改(所以才会有也的分裂和合并,才会有insert/update/delete的效率问题)。
[/COLOR]
3、DOL表的查询IO次数为:1(index root page)+1(index Intermediate page)+1(index leaf page)+1000
——最后这个+1000,我不能肯定,不知道有没有方法可以监控到实际的IO次数?如果有办法,那就拿刚reorg过的DOL表测一下。
+1000这个数字,的确是在DOL表最混乱的极致下的数据,对于刚reorg之后的表,和APL之间的IO差距就在于index页面的几个IO,的确这个比较不太合适,我收回,在大多数情况下,不会有这么大的差异。
[/COLOR]
4、13楼
——还是reorg rebuild
请看我对reorg rebuild的描述[/COLOR]
5、dataonly-locked table are not necessarily maintained in exact order by the key.
——不必要(not necessarily)不表示不能
not necessarily在这里不是"不必要"的意思,而是"不一定",这两者之间的差异大了。
[/COLOR]
另外,
只说APL表,SELECT语句用到聚簇索引和只用到非聚簇索引,其它条件类似,会不会差别真的很大?
还是APL表,举个极端的例子,如果页为2K,行长大于1024,即一个数据页只能放一行,IO次数的计算又会怎样?
上面只说了SELECT的情况,对于INSERT/DELETE等情况,APL表显然很有劣势。重申一下我的观点——SELECT时APL表优势不明显,INSERT/DELETE时APL表劣势很突出。(当然,SELECT时APL表优势明不明显,还需要用测试数据说话) [/B]
所以我的结论是:
1、APL表上的聚簇索引保证数据是按照该索引的顺序排列。为了保持这个顺序,所以在insert /update/delete的过程中有可能(这个和索引列的选择以及数据的组织相关)会造成额外的IO,这个IO也不是想象中的那么大。
2、由于APL表上的聚簇索引保证任何时候数据都是按照索引顺序排列,因此,APL表上的聚簇索引查询和其他的索引查询方式是不同的,在范围查询情况下,会有效率上的提升。
3、APL适用的场合:
数据变动不大的表(大量的查询,insert/update/delete比较少)。
大量的insert和select,update/delete少,这种情况下,可以有选择的创建聚簇索引,减少在insert情况下的页分裂。例如:创建聚簇索引的列只会增加,大量的明细表上都会有时间字段,在这种字段上创建聚簇索引,而插入的数据也是按照时间增加的,这样可以避免Insert带来的页的分裂情况。
4、APL不适合的场合:
数据频繁变动的表,有大量并发的insert/delete/update。这会引起末页竞争和页的分裂及合并。
5、DOL适合的场合:
APL不适合的场合也就是DOL适合的场合。
6、DOL的缺点:
会带来锁数量的大量增加,会消耗更多的资源。
需要定期的作reorg,而reorg会上排他的表级锁,需要停业务。
所以在不同的场合选择不同的锁模式以及索引,才是这场讨论的目的。 |
|