【发布时间】:2010-11-21 12:09:39
【问题描述】:
我的一张表的三列上有一个复合索引。如果我在查询的 where close 中有三列,它可以找到。当我的搜索查询只有三分之二时,事情似乎不再那么快了!
你知道如何解决这个问题吗?
谢谢,
谭
附: 表
APPL_PERF_STATS
在 (current_appl_id, event_name & generic_method_name) 上有复合索引 这个耗时 2 分钟(使用复合索引中的所有列):
SELECT * FROM APPL_PERF_STATS WHERE (GENERIC_METHOD_NAME != 'NULL' AND CURRENT_APPL_ID != 'NULL' AND EVENT_NAME != 'NULL') AND ROWNUM = to_date('20-07-2008 14:36','dd-mm-yyyy HH24:mi') AND cover_period_start_ts
这个运行了 12 分钟(仅使用综合索引中的三分之二):
SELECT * FROM APPL_PERF_STATS WHERE (GENERIC_METHOD_NAME != 'NULL' AND CURRENT_APPL_ID != 'NULL' AND EVENT_NAME != 'NULL') AND ROWNUM = to_date('20-07-2008 14:36','dd-mm-yyyy HH24:mi') AND cover_period_start_ts
【问题讨论】:
-
- 每个语句的查询计划是什么? - 每个查询返回多少行?如果后一个查询返回更多的行,自然需要更长的时间才能完成。 - 你如何衡量“2分钟”和“12分钟”?那是获取第一行的时间吗?获取最后一行的时间?还是别的什么?
-
请原谅我对数据库术语缺乏经验。不太确定查询计划是什么意思..我正在使用 TOAD 运行查询,它会立即带来结果,所以我不太确定它是第一行还是所有行。我从 TOAD 获得时间,因为它显示了查询花费了多长时间,所以我猜它是获取所有结果的时间。