Dav_笔记9:Using Indexes and Clusters之2

本节介绍以下内容:

■选择列和表达式到索引

■选择复合索引

选择列和表达式索引

键是可以构建索引的列或表达式。 请按照以下准则选择索引键:

■考虑索引在WHERE子句中经常出现的键。

■考虑索引经常在SQL语句中连接表的键。有关优化联接的详细信息,请参阅第14-11页的“使用哈希群集进行性能”。

■选择具有高选择性的索引键。索引的选择性是表中具有相同索引键值的行的百分比。如果少数行具有相同的值,则索引的选择性是最佳的。

当数据分布偏斜时,索引低选择性列可能会有所帮助,这样一个或两个值的出现频率远低于其他值。

■不要在具有很少不同值的键或表达式上使用标准B树索引。这些键或表达式通常具有较差的选择性,因此除非频繁选择的键值出现频率低于其他键值,否则不会优化性能。在这种情况下,您可以有效地使用位图索引,除非频繁修改索引,如在高并发OLTP应用程序中。

■不要索引经常修改的列。修改索引列的UPDATE语句和修改索引表的INSERT和DELETE语句比没有索引的时间要长。此类SQL语句必须修改表中的索引和数据中的数据。他们还创建了额外的撤消和重做。

■不要将仅出现在带有函数或运算符的WHERE子句中的键索引。使用MIN或MAX以外的函数的WHERE子句或具有索引键的运算符不会使使用索引的访问路径(基于函数的索引除外)不可用。

■在大量并发INSERT,UPDATE和DELETE语句访问父表和子表的情况下,考虑索引引用完整性约束的外键。这样的索引允许父表上的UPDATE和DELETE而不共享锁定子表。

■选择索引键时,请考虑查询的性能增益是否值得INSERT,UPDATE和DELETE的性能损失以及使用存储索引所需的空间。您可能希望通过比较带有和不带索引的SQL语句的处理时间来进行实验。您可以使用SQL跟踪工具测量处理时间。

选择综合指数

复合索引包含多个键列。与单列索引相比,复合索引可提供额外的优势:

■提高选择性

有时您可以组合两个或多个列或表达式,每个列或表达式具有较差的选择性,以形成具有更高选择性的复合索引。

■减少I / O.

如果查询选择的所有列都在复合索引中,则Oracle数据库可以从索引返回这些值,而无需访问该表。

当语句包含使用索引的前导部分的构造时,SQL语句可以使用涉及复合索引的访问路径。

索引的前导部分是在创建索引的CREATE INDEX语句的列列表中首先和连续指定的一个或多个列的集合。考虑这个CREATE INDEX语句:

CREATE INDEX comp_ind

ON table1(x,y,z);

■x,xy和xyz列的组合是索引的前导部分

■yz,y和z的列组合不是索引的前导部分

选择复合索引的键

请遵循以下准则来选择复合索引的键:

■考虑在与AND运算符结合使用的WHERE子句条件中经常出现的键上创建复合索引,尤其是当它们的组合选择性优于单独的任一键的选择性时。

■如果多个查询根据一个或多个键值选择同一组键,则考虑创建包含所有这些键的复合索引。

当然,请考虑与前面部分中描述的索引的一般性能优势和权衡相关的准则。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值