【发布时间】:2013-07-31 20:19:00
【问题描述】:
我有以下简单的动态选择查询
Select RELATIONSHIP
from DIME_MASTER
WHERE CIN=? AND SSN=? AND ACCOUNT_NUMBER=?
该表有 1,083,701 条记录。此查询需要 11 到 12 秒才能执行,这很昂贵。 DIME_MASTER 表有 ACCOUNT、CARD_NUMBER INDEXES。请帮助我优化此查询,以使查询执行时间低于秒。
【问题讨论】:
-
好吧,在
cin、ssn和account_number的所有三个上放置一个索引,按选择性顺序排列(列中唯一值最多的应该是第一个)。如果可能,使索引唯一...然后动态是可怕的...我假设您的意思是您更改变量而不是每次都构建查询。 -
好吧,如果没有适当的索引,难怪这会很慢...您尝试了什么?执行计划显示什么?
-
您需要向我们展示表和索引定义,以及每个表的行数。也许您的表格定义不佳。也许索引没有正确创建。也许您认为您在该列上没有索引。没有看到表和索引定义,我们无法判断。我们还需要行计数,因为这会极大地影响查询优化。如果您知道如何进行
EXPLAIN或获得执行计划,请将结果也放入问题中。 -
当结果列表的总数很高时,查询将需要一些时间来执行。所以确保给定的约束是否给出了这么多的结果。
-
@Ben 如果您对所有列都具有相等条件,则索引中列的顺序无关紧要。它是 O(log n)。
标签: oracle select optimization