谨慎选择

Oracle 查询效率 谨慎选择

╄→尐↘猪︶ㄣ 提交于 2019-12-02 21:19:16
Oracle有很多值得学习的地方,通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果。对索引列使用OR将造成全表扫描。注意,以上规则只针对多个索引列有效。假如有column没有被索引,查询效率可能会因为您没有选择OR而降低。在下面的例子中,LOC_ID 和REGION上都建有索引。 高效: SELECT LOC_ID 。 LOC_DESC ,REGION FROM LOCATION WHERE = UNION SELECT LOC_ID , LOC_DESC ,REGION FROM LOCATION WHERE = “MELBOURNE” 低效: SELECT LOC_ID ,LOC_DESC ,REGION FROM LOCATION WHERE = OR = “MELBOURNE” 用IN来替换OR: 这是一条简单易记的规则,但是实际的执行效果还须检验,在Oracle8i下,两者的执行路径似乎是相同的: 低效: SELECT…. FROM LOCATION WHERE = OR = OR = 高效: SELECT… FROM LOCATION WHERE LOC_IN IN (10,20,30); 避免在索引列上使用IS NULL和IS NOT NULL: 避免在索引中使用任何能够为空的列,Oracle将无法使用该索引。对于单列索引,假如列包含空值