日期:2014-05-18  浏览次数:20526 次

请问我该怎样建立索引???
数据库:Sql   2000       表:UserInfo         数据:2283761条.
UserID             int                         primary   key   identity,
UserName         varchar(20)         not   null,
UserPass         varchar(20)         not   null,
UserAddress   varchar(200)
直接使用select   UserID,UserName,UserPass,UserAddress   from   UserInfo   需要25秒.
我试着建立create   index   Index_UserInfo   on   UserInfo(UserID)

再SELECT   UserID,UserName,UserPass,UserAddress   FROM   UserInfo   WITH(INDEX=Index_UserInfo)花了1分钟01秒.
我该怎样建立正确的索引?虚心请教!

------解决方案--------------------
把 UserID,UserName,UserPass,UserAddress 建为一个联合索引。
------解决方案--------------------
全表扫描,在userid上建聚集索引就OK了
------解决方案--------------------
建議經常出現在WHERE後的字段建立索引
------解决方案--------------------
create unique clustered index 索引名
on dbo.表名(列名)--聚合索引

create unique clustered index 索引名
on dbo.表名(列A,列B,...)--复合索引
------解决方案--------------------
楼主创建的是非聚合索引(与聚合索引相比,非聚集索引并不在索引的叶子级包含所有数据行。反之,它在叶子级包含的有键列和指向表中行的指针)
楼主可以参照一下索引的用法
------解决方案--------------------
UserID,UserName,UserPass,UserAddress 的联合簇集索引
------解决方案--------------------
CREATE clustered Index Index_UserInfo ON UserInfo(UserID,UserName,UserPass,UserAddress)
------解决方案--------------------
去掉原先在UserID的簇集索引,如果有的话
------解决方案--------------------
或者直接将主键建立在UserID,UserName,UserPass,UserAddress上的联合主键
------解决方案--------------------
200w的数据,直接查几个字段?? 还没有where条件,不存在这样的应用吧,建议lz写个分页的存储过程来实行这种查询,每页返回200行那样,效率应该没有问题!
------解决方案--------------------
我晕,查询的时候没有条件?
------解决方案--------------------
索引不能太宽,尤其是聚集索引,所以那些在所有字段上建索引的方法不可取。

还有你的userid上已经有聚集索引了,为啥还要在上面建一个非聚集索引。

对于全表扫描来说,在单调递增列上建聚集索引是最快的。
------解决方案--------------------
如果没有where条件的话直接查就行了


TO andy1995(拓狼)
感谢您的解答,但是UserID是primary key,本身就存在一个聚焦索引对吗?表扫描就可以了,不用建什么索引。
----------------
你查询的时候是强制使用的非聚簇索引。。
------解决方案--------------------
jacobsan(梅) ( ) 信誉:100 Blog 2007-01-30 15:37:12 得分: 0


CREATE clustered Index Index_UserInfo ON UserInfo(UserID,UserName,UserPass,UserAddress)


-------------
聚簇索引适合返回一定范围的数据,并且字段越窄越好,这样建索引每个索引页并不能容纳几条数据,