一个大型数据库(500M-5000M),仅两个字段(a,b),都无重复值,有时要按a 值查询有时按b值查询,其中a是自动增加类型,b是字符型,在sql2000中采用何种索引方案合适
解决方案 »
- SQL通过if else判断后插入不同语句
- 根据字段查询表时,将另一字段部分数据加-号,怎么办呢?
- SQL Server 2008 “自定义列”如何作为检索条件?(查询语句内有with关键字)
- 一个麻烦的分组显示问题
- 如何在使用聚合函数时又得到其它列的值???
- 这样的查询语句该如何写?
- 最后一步 restore log报错: 该日志位于与数据库不一致的恢复路径上?
- 怎么删除 SQL IDE 服务器名称列表中的无用的名字
- 数据库定时恢复
- 各位同仁!!!怎样在vb中将报表设置为横向预览?
- 用DTS从工作站导入数据库到本地,出现不允许使用DTS传输数据的提示,无法完成。
- 如何用打包sql server 數據庫的應用程序
我怎麼不知道indentity字段就有索引了?
你設定b為cluster index,a為noncluster index 因為如果你的cluster index設在a上,那麼你每次增加一筆記錄都加在表的最後,也就意味這你索引調節的次數會很多了.
有道理。但我认为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 最好
如果說a是一個序列號的話,那麼用b的查詢應該多,那麼應該用b做clustered index
在Mssql6.5以前,nonclustered的最後一個節點指向的是一條紀錄,而以後指向的是clustered的一個節點(如果數據是堆積的話,還是指向一條紀錄),這意味nonclusted index變的更小了,但是效率降低了,所以說一個字段 nonclustered 比 clustered在新的情況下快是沒有道理的.還有你怎麼知道a的字段小?一個int在MSSQL數據庫中的字節是17,也不小了吧
老兄,我很高兴能和你交流。
在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.这样对于加快存取速度很有好处的。
17個字節之說不是我杜撰的,是MS的人對我說的bug,和理論無關,黨b唯一是,建立的速度
nonclustered是應該快的,但是查詢效率一定是clustered高的.沒錯吧
我的意思是这样的,当你在a字段上建立clustered index的时候完全按照a的大小按物理顺序排列的比如1,2,3,5,7,8,9......100...。假设你改变其中的一个值(我只是假设,对sqlserver的identity字段不能改变的)比如我将100改称4,那么数据库就会调整100字段到3和5之间。肯定要调整的,否则就不叫clustered index了。
完全同意。
但并不是所有的字段都能建立clustered index,而且建立clustered index还有考虑其他的利益,会不会造成其他的性能损失等。
clustered索引只有一個,應該好好珍惜的.
同意。