Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我应该什么时候创建数据库索引? 何时为表设置索引,是在表创建期间还是在性能调整期间 索引的优点和缺点是什么_Sql_Sql Server 2005_Indexing - Fatal编程技术网

Sql 我应该什么时候创建数据库索引? 何时为表设置索引,是在表创建期间还是在性能调整期间 索引的优点和缺点是什么

Sql 我应该什么时候创建数据库索引? 何时为表设置索引,是在表创建期间还是在性能调整期间 索引的优点和缺点是什么,sql,sql-server-2005,indexing,Sql,Sql Server 2005,Indexing,通常,您可以在创建表的过程中设置索引。在这个阶段,您应该已经很好地了解了如何查询数据,以及哪些字段将最常用作查询条件 在性能调优期间,通常建议将明显的索引设置到位。在此阶段,您将能够了解是否有索引未被有效使用,或者是否有索引可以提高性能的查询。在性能调整期间,没有任何东西可以阻止您删除或添加新索引。需要达成平衡。如果您知道将查询一个表,并且FieldA将是where子句的一部分,并且它是一个高度可选的字段(googlecardinality),那么它是一个很好的先发制人调优的候选者 不要对所有类

通常,您可以在创建表的过程中设置索引。在这个阶段,您应该已经很好地了解了如何查询数据,以及哪些字段将最常用作查询条件


在性能调优期间,通常建议将明显的索引设置到位。在此阶段,您将能够了解是否有索引未被有效使用,或者是否有索引可以提高性能的查询。在性能调整期间,没有任何东西可以阻止您删除或添加新索引。

需要达成平衡。如果您知道将查询一个表,并且FieldA将是where子句的一部分,并且它是一个高度可选的字段(googlecardinality),那么它是一个很好的先发制人调优的候选者

不要对所有类型的字段都使用索引,因为你认为这是有意义的,你必须知道这些事情。一位智者曾经说过,过早的调整/优化是万恶之源。在这种情况下,索引可能会影响插入/更新性能,因为不仅需要更新表数据,还需要更新索引

旁注-对于一些大型数据加载,人们通常会删除索引,进行加载,然后重新创建索引,以便加载执行得更快

至于优点和缺点,这是一个巨大的话题。我建议你从这里开始


我会添加“明显”索引,即在创建表时查询的字段上,然后根据需要添加其他索引,作为调整的一部分。一开始索引越少越好,然后对系统的性能和使用情况有一个感觉——配置文件就是你的朋友听到的

优势-更快的访问速度(使用索引时),以及执行某些业务逻辑(如无重复)的能力

缺点-表占用更多空间,插入行速度较慢(可能会慢得多),触及关键字段的更新速度较慢

许多(大多数?)DBMS使用索引来支持唯一约束。始终创建索引以强制执行唯一约束;它们(约束)对于数据库的正确操作至关重要

如果您可以选择如何在多个列上创建索引,请将查询中始终引用的列放在其他字段之前-通常是这样。如果前导列也有一定的选择性,这是最好的

在具有唯一性所必需的约束之后,考虑强制引用完整性所需的那些约束。它们通常也由DBMS强制执行。同样,您不能让您的数据库处于无关联状态——它是一个逻辑系统,如果它包含谬误,您可以从中证明任何东西,这是没有帮助的

处理完唯一性和引用完整性约束(索引)后,您可能会从其他约束中受益,也可能不会受益。仔细选择,并添加尽可能少的额外内容(零是一个很好的数字)。每个索引都会减慢更新操作(更新、插入、删除)并使用存储空间。其意图是,它应该通过加快查询速度来赢得自己的位置。但是,不要忘记优化器必须考虑每个索引,以及它在回答查询时是否有用,因此索引也会减慢优化器的速度(尽管您可能很难衡量这种效果)

当您添加索引时,将它们添加到选择性列(不是包含“M”和“F”的“性”,但可能包含“出生日期”在1900到2010之间,或者可能是比它们更明显的值。考虑额外的列是否有助于回答更多的查询。一些DBMS(如DB2)。为索引提供额外的列,这些列不属于唯一性约束的一部分,但提供查询中经常使用的列。这些列可以只允许索引扫描(不需要访问表数据的扫描,因为所需的值都在索引中)

可以说的还有很多,但这涵盖了很多领域

  • 尽可能少的索引-最好没有额外的索引

@MrTelly您能说出什么是“明显的”索引吗?正如我所说,您知道的字段也会被查询到任何外键字段。另外:必须阅读: