2009-01-08 84 views
0

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

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

回答

4

这一切都取决于你的实证研究。将数据库的副本放到不同的环境中,运行分析器,同时运行搜索并插入带和不带索引。衡量性能,看看有什么帮助。 :)

+0

如果您不了解数据库的工作原理,这是一个好主意。但是这些系统并不是完全黑盒子。如果他随机转动旋钮,组合可能需要一段时间。是否聚集或不聚,1列或多列,高基数或低,随机数据或命令... – 2009-01-08 18:55:32

3

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

2

由于Ray says,这一切都取决于情况,唯一的方法来告诉是在负载下尝试它。

从理论角度来看:是的,向表中添加索引会减慢插入速度,因为DBMS必须保留每个插入的所有索引。但你会注意到吗?观察性能会有影响吗?也许不会。索引通常保存在B + Tree结构中,可以在O(log n)时间插入,这非常好,更不用说所有的磁盘缓存等等。所以唯一可以肯定的方法就是试试它们看看有什么不同。

0

我不是Sql Server专家,但我曾与一位Microsoft高级工程师一起研究过我们的系统之一的性能。据他介绍,MSSS发现页面插入新行的方式是通过“自由空间扫描”...扫描每个页面,寻找具有插入行的空间的页面。

如果向表格添加聚簇索引,则会强制数据在一个特定位置移动。假设您为此表添加一个自动编号列并将其设置为聚集索引。现在MSSS不扫描一个空闲块,它知道999之后右移1000;所以它会对索引a进行散步。

我会给那一枪。不要花太长的时间去尝试4到500万行。