【问题标题】:oracle index in table join表连接中的 oracle 索引
【发布时间】:2011-03-09 22:33:49
【问题描述】:

如果我这样做了

select * 
    from table1 
    where table1.col1 = 'xx' 
        and table1.col2 = 'yy' 
        and table1.col3= 'zz'`

执行计划显示全表扫描。 此表上的索引针对 col4 和 col5。 是否需要在 col1,col2,col3 中的每一个上设置一个索引以使查询执行得更好?

如果查询是这样的:

select * 
    from table1,table2 
    where table1.col1=table2.col2 
        and table1.col2 = 'yy' 
        and table1.col3= 'zz'

如果我们在 col1 和 col2 上创建一个索引就足够了吗?

【问题讨论】:

    标签: oracle10g


    【解决方案1】:

    您应该尝试在查询中使用的列上添加索引:

    • table1 col1
    • table1 col2
    • table1 col3
    • table2 col2

    请注意,在某些情况下,拥有多列索引也是有利的,例如:

    • table1 (col2, col3)

    在不了解您的数据的情况下,很难预测哪个索引效果最好,但您可以尝试几种不同的可能性,看看哪种效果最好。

    【讨论】:

    • 谢谢。您提到了“不了解更多数据”在为所有列创建索引之前我可以检查什么?
    • @Kaushik:重要的是索引的选择性。数据库通常会更喜欢使用最具选择性的索引。找出哪个索引更好的一种简单方法是添加您认为可能使用的所有索引,然后查看查询计划以查看实际使用了哪些索引。然后,如果您不需要它们,您可以再次删除其他索引。显然,如果您有一个包含合理数量的测试数据的表,这会更好 - 如果表几乎是空的,则不会使用索引,如果您有数十亿行,则创建索引将需要很长时间。
    猜你喜欢
    • 2015-08-11
    • 2013-12-05
    • 1970-01-01
    • 2016-03-10
    • 2011-09-02
    • 2020-10-15
    • 2013-03-29
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多