主从表聚集索引设计问题
以进销存为例,存在订单主表 OrderMaster(BillNO,Billdate,creator,customerId....)
从表 Orderdetail(BillNo,....)
Billno varchar(20) 唯一。
现在的情况是 以BillNo 为主键为聚集索引。(每天增加的单1000-3000条左右。)
这样的优点对Join 链接从表有帮助。而且BillNo也是递增的也是不可更改的。符合聚集索引的条件
但是 "Billno 唯一" 这一点不符合聚集索引的条件,可是由于单据都是顺序存取,所以也基本满足可以将附近的数据都取到内存的原则,不知道这样理解对不?由于Billno 是按顺序增加,所以不会分散存到其它页去造成页撕裂,只会在末端新增页。那么填充因子是否可以设置成很大,如98以上。这样设置填充因子是否合理?
但是也考虑到这样的情况,用户查单,一般都是按日期条件查询,然后再在里面查找相应的Billno 。
再读取相应的明细。是否可以这样设计:以日期为聚集索引,然后以Billno 为非聚集索引。毕竟一旦用到主表,一般情况下都会用到从表 这样设计索引对JOIN连接是否有影响?
尽管用户经常需要查某一张单的明细。似乎以BillNo 为非聚集索引最好(唯一,一次性取的数量少)。
但是由于非聚集索引的页仅仅指向一个地址,而并非一个值。如果经常使用 单号来查数据的话。效能似乎并没有聚集索引效率高。不知道这样理解对不?
现在的疑惑,是用billDate 做聚集索引,还是BILLNO做聚集索引好?由于没有测试环境,所以无法模拟真实环境。希望大家给个意见
从表 Orderdetail(BillNo,....)
Billno varchar(20) 唯一。
现在的情况是 以BillNo 为主键为聚集索引。(每天增加的单1000-3000条左右。)
这样的优点对Join 链接从表有帮助。而且BillNo也是递增的也是不可更改的。符合聚集索引的条件
但是 "Billno 唯一" 这一点不符合聚集索引的条件,可是由于单据都是顺序存取,所以也基本满足可以将附近的数据都取到内存的原则,不知道这样理解对不?由于Billno 是按顺序增加,所以不会分散存到其它页去造成页撕裂,只会在末端新增页。那么填充因子是否可以设置成很大,如98以上。这样设置填充因子是否合理?
但是也考虑到这样的情况,用户查单,一般都是按日期条件查询,然后再在里面查找相应的Billno 。
再读取相应的明细。是否可以这样设计:以日期为聚集索引,然后以Billno 为非聚集索引。毕竟一旦用到主表,一般情况下都会用到从表 这样设计索引对JOIN连接是否有影响?
尽管用户经常需要查某一张单的明细。似乎以BillNo 为非聚集索引最好(唯一,一次性取的数量少)。
但是由于非聚集索引的页仅仅指向一个地址,而并非一个值。如果经常使用 单号来查数据的话。效能似乎并没有聚集索引效率高。不知道这样理解对不?
现在的疑惑,是用billDate 做聚集索引,还是BILLNO做聚集索引好?由于没有测试环境,所以无法模拟真实环境。希望大家给个意见
...全文
相关推荐
sql 聚集索引和非聚集索引(详细整理)
主要介绍了聚集索引和非聚集索引的相关知识,比较详细整理了一些知识点,需要的朋友可以参考下
sqlserver 聚集索引和非聚集索引实例
sqlserver 聚集索引和非聚集索引实例,学习sqlserver索引的朋友可以参考下。
SQL Server 聚集索引和非聚集索引的区别分析
聚集索引:物理存储按照索引排序 非聚集索引:物理存储不按照索引排序
聚集索引与非聚集索引的区别
一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
索引介绍聚集索引和非聚集索引
关于索引的介绍,以及b+树结构图,两种索引性能比较,索引优化建议


