Sql 索引还是不索引

Sql 索引还是不索引,sql,indexing,sql-server-2000,Sql,Indexing,Sql Server 2000,我有一个专门用于记录用户操作的数据库。数据库中有一些针对特定类型操作的小表。这些数据很少被搜索,但表的行数开始攀升到数百万。我没有注意到很大的速度减慢,但我想知道索引表进行搜索是否会阻碍或帮助插入的性能。插入是不断执行的,但搜索并不经常发生,而且表将继续增长 我应该在这些表上创建索引吗?为什么或为什么不呢? < P>而不是索引,我认为您应该考虑在插入行的表中没有索引,然后复制表(并且可能使用索引)来专门用于查询。 < P>这完全取决于您的实证研究。将数据库的副本复制到不同的环境中,并在运行带索引

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


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

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

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

这一切都取决于具体情况,唯一的判断方法就是在负载下尝试


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

我不是Sql Server专家,但我曾与Microsoft高级工程师一起研究过我们其中一个系统的性能。据他说,MSSS查找页面以插入新行的方式是通过“空闲空间扫描”。。。对每一页进行扫描,查找有空间插入行的页

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


我愿意试一试。不应该花费太长时间来尝试处理400万或500万行。

如果您对数据库的工作方式一无所知,这是一个好主意。但这些系统并非完全是黑箱。如果他随机转动旋钮,组合可能需要一段时间。是否群集,1列或多列,高基数或低基数,随机数据或有序数据。。。