发布于 2010-01-05 04:22:42
很多(大多数?)DBMS使用索引来支持唯一的约束。始终创建索引以强制执行唯一约束;它们(约束)对于数据库的正确操作至关重要。
如果您可以选择如何在多个列上创建索引,则将查询中始终引用的列放在其他字段之前--通常是。如果前面的列也有一定的选择性,这是最好的。
在您有了唯一性所必需的约束之后,请考虑执行引用完整性所需的约束。它们通常也是由DBMS授权的。同样,你不能让你的数据库处于不完整的状态--它是一个逻辑系统,如果它包含谬误,你可以从它证明任何东西,这是没有帮助的。
在处理了唯一性和引用完整性约束(索引)之后,您可能受益于也可能不会受益于其他约束。仔细选择,增加尽可能少的额外(零是一个好的数字)。每个索引减慢更新操作(更新、插入、删除)并使用存储空间。其意图是通过加快查询来赢得自己的位置。但是,不要忘记优化器必须考虑每个索引以及它在回答查询时是否有用,所以索引也会减慢优化器的速度(尽管您可能很难衡量这种效果)。
在添加索引时,将它们添加到选择性列中(不是包含“M”和“F”的“性别”,而是包含1900年至2010年出生日期的“道布”,或者可能比这更明显。考虑额外的列是否有助于回答更多的查询。一些DBMS (如DB2)提供具有额外列的索引,这些列不是唯一性约束的一部分,但提供了查询中经常使用的列。它们允许只进行索引扫描(不需要访问表数据,因为所需的值都在索引中)。
还有很多可以说的,但这涵盖了很多地区。
https://stackoverflow.com/questions/2004032
复制相似问题