以进销存为例,存在订单主表  OrderMaster(BillNO,Billdate,creator,customerId....)
                      从表  Orderdetail(BillNo,....) Billno varchar(20) 唯一。
现在的情况是 以BillNo 为主键为聚集索引。(每天增加的单1000-3000条左右。)
这样的优点对Join 链接从表有帮助。而且BillNo也是递增的也是不可更改的。符合聚集索引的条件
但是 "Billno 唯一" 这一点不符合聚集索引的条件,可是由于单据都是顺序存取,所以也基本满足可以将附近的数据都取到内存的原则,不知道这样理解对不?由于Billno 是按顺序增加,所以不会分散存到其它页去造成页撕裂,只会在末端新增页。那么填充因子是否可以设置成很大,如98以上。这样设置填充因子是否合理?但是也考虑到这样的情况,用户查单,一般都是按日期条件查询,然后再在里面查找相应的Billno 。
再读取相应的明细。是否可以这样设计:以日期为聚集索引,然后以Billno 为非聚集索引。毕竟一旦用到主表,一般情况下都会用到从表 这样设计索引对JOIN连接是否有影响?尽管用户经常需要查某一张单的明细。似乎以BillNo 为非聚集索引最好(唯一,一次性取的数量少)。
但是由于非聚集索引的页仅仅指向一个地址,而并非一个值。如果经常使用 单号来查数据的话。效能似乎并没有聚集索引效率高。不知道这样理解对不?
现在的疑惑,是用billDate 做聚集索引,还是BILLNO做聚集索引好?由于没有测试环境,所以无法模拟真实环境。希望大家给个意见

解决方案 »

  1.   

    当然是BILLNO,billDate 作为非聚集索引
      

  2.   

    主要看怎么查询的如果是主从表连结一起,带日期条件查询,建议用BILLNO做聚集索引
    如果是先按日期条件查询主表,再用另一个查询查从表,建议用billDate 做聚集索引
      

  3.   


    如果主从表连接 用BILLNO做聚集索引会加快查询速度 而且很方便操作 因为用ID作关联本来就方便很多 
      

  4.   

    单据号+单据的顺序号做成主键,当然是聚集索引,如果是单据的主表的话肯定是单据号加主键了时间问题很简单,单据号表现出时间就可以了,比如OD20091001之类就可以了,查询的时候like 'OR20091001%'
      

  5.   

    订单主表  OrderMaster(BillNO,Billdate,creator,customerId....)
    从表  Orderdetail(BillNo,....) 
    主表:
    如果主表上按BillNO比按Billdate访问的多建议在BillNO上建立主键,否则在Billdate上建立聚集索引。
    当BillNO上建立主键的时候,则Billdate上建立非聚集索引,反之在Billdate建立聚集索引,BillNO建立非聚集索引。
    如果考虑到经常有JOIN的话,还是建议在主表BillNO上建立主键,一般情况是这样。
     从表:
    可以在从表上的Billno上建立聚集索引, 然后Billno可以与其它键建立非聚集索引。
    填充因子可以选择80,便于扩展,但会浪费一部分空间。
      

  6.   

    BillNO 设置为聚集索引. Billdate为非聚集索引.