Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Oracle10g 表联接中的oracle索引_Oracle10g - Fatal编程技术网

Oracle10g 表联接中的oracle索引

Oracle10g 表联接中的oracle索引,oracle10g,Oracle10g,如果我这样做 select * from table1 where table1.col1 = 'xx' and table1.col2 = 'yy' and table1.col3= 'zz'` 执行计划显示全表扫描。 此表中的索引针对col4和col5存在。 我是否需要在col1、col2、col3中的每一个上设置一个索引以使查询执行得更好 如果查询是这样的: select * from table1,table2

如果我这样做

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上创建索引,是否足够?

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

  • 表1 col1
  • 表1 col2
  • 表1 col3
  • 表2 col2
请注意,在某些情况下,具有多列索引也是有利的,例如:

  • 表1(col2、col3)

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

谢谢。您提到“在不了解更多数据的情况下”,在对所有列创建索引之前,我可以检查哪些内容?@Kaushik:重要的是索引的选择性。数据库通常倾向于使用最具选择性的索引。找出哪个索引更好的一种简单方法是添加您认为可能会使用的所有索引,然后查看查询计划以查看其中哪些实际使用。然后,如果不需要,可以再次删除其他索引。显然,如果您有一个包含合理数量测试数据的表,那么这会更好——如果该表几乎为空,则不会使用索引,如果您有数十亿行,则创建索引将花费很长时间。