如何选择和优化oracle索引?

前端之家收集整理的这篇文章主要介绍了如何选择和优化oracle索引?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有一般规则创建索引或不。
如何选择我应该在此索引中包括哪些字段或不包括它们?

我知道它总是取决于环境和数据量,但我想知道我们是否可以做一些全球接受的规则,在Oracle中创建索引。

Oracle文档对索引选择有很好的考虑: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

报价:

>考虑在WHERE子句中经常使用的索引键。>考虑经常使用的索引键来连接sql语句中的表。有关优化连接的更多信息,请参见“使用哈希集群实现性能”一节。>选择具有高选择性的索引键。索引的选择性是表中具有相同索引键值的行的百分比。如果几个行具有相同的值,则索引的选择性是最佳的。注意:Oracle在您使用完整性约束定义的唯一键和主键的键和表达式上自动创建索引或使用现有索引。如果数据分布有偏差,那么索引低选择性列会很有帮助,因此一个或两个值的发生频率远低于其他值。>不要对具有几个不同值的键或表达式使用标准B树索引。这样的键或表达式通常具有差的选择性,因此不优化性能,除非频繁选择的键值比其他键值出现频率更低。在这种情况下,您可以有效地使用位图索引,除非索引频繁修改,如在高并发OLTP应用程序中。>不要对经常修改的列进行索引。修改索引列的UPDATE语句和修改索引表的INSERT和DELETE语句所需的时间比没有索引时要长。这样的sql语句必须修改索引中的数据以及表中的数据。它们还生成额外的撤消和重做。>不要仅出现在具有函数或运算符的WHERE子句中的索引键。使用除MIN或MAX以外的函数或具有索引键的运算符的WHERE子句不会使使用索引的访问路径(基于函数的索引除外)不可用。>在大量并发INSERT,UPDATE和DELETE语句访问父表和子表的情况下,请考虑对参照完整性约束的外键建立索引。这样的索引允许父表上的UPDATE和DELETE,而不共享锁定子表。>当选择索引密钥时,请考虑查询性能增益是否值得INSERT,UPDATE和DELETE的性能损失,以及使用存储索引所需的空间。您可能希望通过比较有和没有索引的sql语句的处理时间来进行实验。您可以使用sql跟踪工具测量处理时间。

猜你在找的Oracle相关文章