导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

关于索引(高手进)

zhnzzy 2008-01-07 09:29:37
有一些问题不太明白
1。当一个表只有2万条数据时候是否需要建立索引呢?查询时候这个表和别的表关联的。因为发现建立后在查询分析器里面速度没有明显提高
2。如果不需要,一般表里面数据是多少条的时候才开始考虑使用索引呢?即这个临界直
3。是否一开始建立表的时候先不建立,等到表里面数据到一定程度的时候才建立呢?
...全文
228 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanhy5 2010-12-13
支持一下,索引很有用,但是也不是那么容易用,学习。
回复
yuedeem 2008-01-11
学习一下 :)
回复
michaelgy 2008-01-10
1。当一个表只有2万条数据时候是否需要建立索引呢?查询时候这个表和别的表关联的。因为发现建立后在查询分析器里面速度没有明显提高
建议建立一个吧。这样在多个Table 作JOIN的时候也可以快些。 而且数据量不大的话,索引占用的空间也是很小的。
另外如果 count(disticnt 该字段) 很小,说明该字段的Value 重复率很高,就没有索引必要。

2。如果不需要,一般表里面数据是多少条的时候才开始考虑使用索引呢?即这个临界直
没有特别临界值。一般几K笔或者有些字段经常和其它表Join的时候,建议增加Index。

3。是否一开始建立表的时候先不建立,等到表里面数据到一定程度的时候才建立呢?
不一定。建立索引的表在使用一段时间后如果频繁更新的话,会出现索引碎片 也是需要Rebuild or Reorganize的。
另外所Bulk insert的时候,也有先Drop index ,等数据插入完成后再增加索引的。

回复
rouqu 2008-01-10
批评和自我批评的精神很重要~
回复
sp4 2008-01-09
至于索引建立,有些是事先就能预先估计出来的。

但是有很多是在后期应用调试创建或变更的,就如Haiwer所说
回复
w2jc 2008-01-09
用于维护数据完整性的索引,比如唯一性,被引用的外键等就应该在设计及建表时建立。
用于提高查询速度的索引要根据具体的查询需求确定。
回复
pigengler 2008-01-08
我认为是否建立索引是根据程序的需求来确定的,而且是在写程序的时候就应该把最关键的索引建好,不过想楼上说的,不能为建索引而建索引。

楼上的也说到,特别是查询比较多的表根是要建索引,比如说一个表结构如下:

产品ID、产品名称、产品分类、品牌、型号、产品进价、产品售价、入库时间、库存数量

无疑,这个表里产品ID是必须作为主键的

但是那些字段要建索引呢?
这个就要根据您的程序来判断了,如果你的用户会经常用产品 分类、入库时间 来查找产品的话,我认为这些就应该建立索引。

也就是 SQL 语句里面 经常放到 Where 语句后边做查询条件的应该建立索引。

这仅仅是我的个人观点,请各位高人点评。

回复
>>>(默认0% 即最小填充)
好像容易误导人

帮助信息:
fill factor 的值为 0 并不表示页面的填满程度为 0%。类似于 fill factor 设置为 100 的情况,SQL Server 在 fill factor 值为 0 时,会用页面全部为数据的页来创建聚集索引,用页面全部为数据的叶子页来创建非聚集索引。与 fill factor 设置为 100 的情况不同的是,SQL Server 在索引树的高层级别上预留空间。很少有理由去改变 fill factor 的默认值,因为可以使用 CREATE INDEX 命令来覆盖它。

索引是必须的,当然不能为索引而索引。
一般来说,索引并不是在一开始就完善,而是在调试和使用过程中调优
索引的建立与否并不是和数据量直接相关,而是与某方面应用需要的查询需求直接相关,从这方面来说,能提高一个查询的速度就应该加索引
索引是拿空间换取时间的,如果空间紧张,索引的取舍就需要综合考虑时间和空间指标
索引之间有时候会有冲突,这时候就需要考虑查询的使用频率,来决定取舍



回复
zhnzzy 2008-01-08
继续征集答案
回复
rouqu 2008-01-07
因此 如果该表需要进行大量的数据加载 之后也仅需少量的DML操作,以QUERY为主的话 问题3的做法是合适的
回复
rouqu 2008-01-07
1 当一个表只有2万条数据时候是否需要建立索引呢?查询时候这个表和别的表关联的。因为发现建立后在查询分析器里面速度没有明显提高
----------
一般来讲 小表建不建索引对速度影响并不大,即若你每100条记录占用一个data page(8K),2W条记录也才占用1.6M 把全表载入内存的带价很小 最大情况160M,这时就已经有必要了。

2 如果不需要,一般表里面数据是多少条的时候才开始考虑使用索引呢?即这个临界直
----------
这个没有绝对 个人认为1W条以上才有建索引的必要

3 是否一开始建立表的时候先不建立,等到表里面数据到一定程度的时候才建立呢?
----------
这个要根据具体情况 即表的insert/update/delete操作频繁对于有多索引的表性能上是一个折扣;另外 索引的填充因子也只在建立时被应用(默认0% 即最小填充)
回复
parss 2008-01-07

我平常都会给表键一个ID字段,这个字段设为主键,自动建一个索引.这样每个表都会有一个索引哦
回复
zefuzhang2008 2008-01-07
索引的建立没有严格的时间前后问题,应该说索引只有能否被使用和维护方面的问题
注:如果是查询表中的所有数据,有没有索引速度应该差别不大(没有锁定问题出现)
回复
zhnzzy 2008-01-07
怎么没人气呀
回复
wzy_love_sly 2008-01-07
最好开始键表就做索引,不管数据的多少
1 是不是没用到索引?应该有明显速度区别
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告