大表问题(没有可用的主键)

时间:2012-02-15 06:52:06

标签: sql performance sql-server-2005

Tabe1有大约10个缺乏记录(1百万)并且不包含任何主键。使用SELECT命令(具有特定WHERE条件)检索数据需要花费大量时间。我们可以通过向表中添加主键来减少检索时间,还是我们需要遵循任何其他方法来执行相同操作。请帮助我。

5 个答案:

答案 0 :(得分:3)

引用特定记录时需要主键。

要使SELECT快速运行,您应该考虑在WHERE中使用的相应列上添加索引。

E.g。加速SELECT * FROM "Customers" WHERE "State" = 'CA'应该在State列上创建一个索引。

答案 1 :(得分:3)

主键不会对性能产生直接影响。但间接地,确实如此。这是因为当您向表中添加主键时,SQL Server会创建一个唯一索引(默认情况下为群集),用于强制实体完整性。但您可以在表上创建自己的唯一索引。因此,严格地说,主索引不会影响性能,但主键使用的索引会影响性能。

WHEN SHOULD PRIMARY KEY BE USED?

答案 2 :(得分:1)

它取决于SELECT语句,表中每行的大小,表中的行数,以及是检索每行中的所有数据还是仅检索数据的一小部分(如果一个子集,是否所需的数据列都存在于单个索引中),以及是否必须对行进行排序。

如果必须返回表中所有行的所有列,则无法通过添加索引来加快速度。另一方面,如果您只是尝试检索一小部分行,那么在过滤条件中涉及的列上提供适当的索引将极大地提高查询的性能。如果您选择所有行或大多数行但只选择一些列,那么如果所有这些列都存在于单个索引中,并且索引中没有条件,则索引可以提供帮助。 / p>

如果没有更多信息,很难更具体。有关于这个主题的全书,包括:

答案 3 :(得分:1)

如果您没有在原因中使用Primarykey,则Primarykey将无法帮助。

如果您想让问题更快,可以在原因的列上创建非群集索引。您可能希望在索引之上包含列(它取决于您的选择原因)

SQL优化器将在您的索引上搜索,以提高查询速度。 (但您应该考虑在表中添加数据的时间。如果在许多列上创建索引,则插入操作可能需要一些时间。)

答案 4 :(得分:0)

您可以采用的一种方法是在桌面上create indexes。创建主键总是更好,这会创建一个唯一的索引,默认情况下会减少检索时间.........

如果SELECT语句中引用了索引列,并且优化程序估计索引扫描将比表扫描更快,则优化程序会选择索引扫描。索引文件通常较小,并且比整个表需要更少的读取时间,特别是随着表变大。此外,可能不需要扫描整个索引。应用于索引的谓词减少了要从数据页读取的行数。

了解详情:Advantages of using indexes in database?