一个大型数据库(500M-5000M),仅两个字段(a,b),都无重复值,有时要按a 值查询有时按b值查询,其中a是自动增加类型,b是字符型,在sql2000中采用何种索引方案合适 

解决方案 »

  1.   

    to songyangk(小草)
    我怎麼不知道indentity字段就有索引了?
    你設定b為cluster index,a為noncluster index 因為如果你的cluster index設在a上,那麼你每次增加一筆記錄都加在表的最後,也就意味這你索引調節的次數會很多了.
      

  2.   

    to jasmine(Yaya) :
    有道理。但我认为a 最好为cluster index,原因有二
    1-字段小,提高索引的检索速度,要知道nonclustered index是利用 clustered index建树的。
    2-a仅仅是一个序列号,仅起到标识唯一的作用,不会经常变化,而B很可能变化频繁,要知道变化频繁的列是不适宜座clustered index,因为对clustered来说每次变化都要调整数据物理存储位置。
    另外,那个字段经常座between and,或返回的记录数量较大的话(比如 where field1 like '%ddd%' 用clustered index最好
    经常座where=的精确查询的,返回纪录很少的字段用nonclustered index 最好
      

  3.   

    to smartdonkey(聪明的毛驴)
      如果說a是一個序列號的話,那麼用b的查詢應該多,那麼應該用b做clustered index
      在Mssql6.5以前,nonclustered的最後一個節點指向的是一條紀錄,而以後指向的是clustered的一個節點(如果數據是堆積的話,還是指向一條紀錄),這意味nonclusted index變的更小了,但是效率降低了,所以說一個字段 nonclustered 比 clustered在新的情況下快是沒有道理的.還有你怎麼知道a的字段小?一個int在MSSQL數據庫中的字節是17,也不小了吧
      

  4.   

    to jasmine(Yaya) :
    老兄,我很高兴能和你交流。
    在mssqlserver中,int怎能占17各字节呢,仅4个而已阿
    我承认用B查询的多,但是这是用B作clustered index的理由吗,当b唯一时,在b上建立nonclustered index不会比建立clustered index慢的,因为不用花费时间在book中寻找,一一对应的吗
    如果b字段比a字段大很多的话,我认为最好不要做clustered index,要知道,大字段很占索引
    空间的,再说了用int比较肯定比char或varchar比较快得多,这样用int作做clustered index
    后,所有的索引都要利用clustered index.这样对于加快存取速度很有好处的。
      

  5.   

    数据库建成后记录不会增加,而且的确a 字段只会where a between *** and ***,要返回大量记录,而b字段是select where b=***,一次只返回一个记录,所以我想聪明的毛驴的方案更合适,不过我对“因为对clustered来说每次变化都要调整数据物理存储位置”这句话不太理解,我不增加记录也要调整数据物理存储位置么,update 也要调整数据物理存储位置?,我想象只有insert多了,多得预留的空间不够了才要调整数据物理存储位置,update 是不会引起调整数据物理存储位置吧?
      

  6.   

    smartdonkey(聪明的毛驴)
      17個字節之說不是我杜撰的,是MS的人對我說的bug,和理論無關,黨b唯一是,建立的速度
    nonclustered是應該快的,但是查詢效率一定是clustered高的.沒錯吧
      

  7.   

    to zyq654321(zyq):
    我的意思是这样的,当你在a字段上建立clustered index的时候完全按照a的大小按物理顺序排列的比如1,2,3,5,7,8,9......100...。假设你改变其中的一个值(我只是假设,对sqlserver的identity字段不能改变的)比如我将100改称4,那么数据库就会调整100字段到3和5之间。肯定要调整的,否则就不叫clustered index了。
      

  8.   

    to jasmine(Yaya) :
    完全同意。
    但并不是所有的字段都能建立clustered index,而且建立clustered index还有考虑其他的利益,会不会造成其他的性能损失等。
      

  9.   

    to smartdonkey(聪明的毛驴)
       clustered索引只有一個,應該好好珍惜的.
      

  10.   

    to jasmine(Yaya) :
    同意。