索引或不索引

时间:2009-01-08 17:02:31

标签: sql indexing sql-server-2000

我有一个专门用于记录用户操作的数据库。该数据库有一些针对特定类型的操作的小表。很少搜索这些数据,但表的行数量开始攀升至数百万。我没有注意到一个大的减速,但我想知道索引表的搜索是否会阻碍或帮助插入的性能。插入是不断执行的,但搜索不会经常发生,并且表格将继续增长。

我应该在这些表上创建索引吗?为什么或为什么不呢?

4 个答案:

答案 0 :(得分:4)

这完全取决于您的实证研究。将数据库的副本复制到不同的环境中,并在运行带索引和不带索引的搜索和插入时运行探查器。衡量绩效,看看有什么帮助。 :)

答案 1 :(得分:3)

我认为您应该考虑在将表中插入行的表中没有索引,而不是索引,然后复制表(并可能应用索引)以专门用于查询。

答案 2 :(得分:2)

作为Ray says,这完全取决于具体情况,唯一的方法是在负载下尝试。

从理论角度来看:是的,向表中添加索引会降低插入速度,因为DBMS必须为每个插入维护所有索引。但你会注意到吗?观察到的表现是否重要?也许不吧。索引通常保存在B + Tree结构中,可以在O(log n)时间插入,这是非常好的,更不用说所有的磁盘缓存等等。所以唯一可以确定的方法是尝试两者方式,看看有什么区别。

答案 3 :(得分:0)

我不是Sql Server专家,但我曾与Microsoft高级工程师合作过我们系统的性能。根据他的说法,MSSS找到一个插入新行的页面的方式是通过“自由空间扫描”...扫描每个页面,查找有空格插入行的页面。

如果向表中添加聚簇索引,则会强制数据进入某个特定位置。假设您向此表添加一个自动编号列,并使其成为聚簇索引。现在MSSS没有扫描一个空闲块,它知道1000 必须在999之后立即行进;所以它会改变索引a。

我会试一试。尝试4或5百万行不应该花太长时间。