【发布时间】:2013-05-16 17:38:38
【问题描述】:
我想提高以下聚合查询的性能。
在有 3000 万条记录的 T_Search_Detail 上,下面的 Query 需要 12 秒才能执行?能不能写得更好,有什么提高性能的建议吗?
解释计划:
Execution Plan
----------------------------------------------------------
Plan hash value: 651646209
--------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 | 42 | 27948 (1)| 00:05:36 |
| 1 | SORT GROUP BY | | 3 | 42 | 27948 (1)| 00:05:36 |
| 2 | VIEW | | 56 | 784 | 27947 (1)| 00:05:36 |
| 3 | HASH GROUP BY | | 56 | 1344 | 27947 (1)| 00:05:36 |
|* 4 | TABLE ACCESS BY INDEX ROWID| T_SEARCH_DETAIL | 898 | 21552 | 27946 (1)| 00:05:36 |
|* 5 | INDEX RANGE SCAN | INDEX_CREATE_DT | 1254K| | 3451 (1)| 00:00:42 |
--------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("TSD"."MATCH_SOURCE" IS NOT NULL AND "TSD"."MATCH_TYPE" IS NOT NULL AND
"TSD"."MATCH_TYPE" LIKE '%Exact%')
5 - access("TSD"."CREATE_DT">=TO_DATE(' 2012-12-11 00:00:00', 'syyyy-mm-dd
hh24:mi:ss') AND "TSD"."CREATE_DT"<TO_DATE(' 2013-04-23 00:00:00', 'syyyy-mm-dd
hh24:mi:ss'))
表 DDL:
此查询使用两个表 T_Search 和 T_Search_detail,其中 FOREIGN_KEY 作为 match_id。
SELECT ms,
SUM(ct)
FROM ( SELECT tsd.match_source ms,
tsd.match_type mt,
COUNT(tsd.search_id) ct
FROM t_search ts,
t_search_detail tsd
WHERE tsd.match_source IS NOT NULL
AND tsd.match_type IS NOT NULL
AND ts.match_id = tsd.match_id
AND tsd.match_type LIKE '%Exact%'
AND
(
tsd.create_dt >= to_date('12/11/2012', 'MM/DD/YYYY')
AND tsd.create_dt < (to_date('04/22/2013', 'MM/DD/YYYY')+1)
)
GROUP BY tsd.match_source,
tsd.match_type
)
GROUP BY ms
ORDER BY ms DESC
【问题讨论】:
-
您至少需要提供解释计划和表格定义,否则没有人能够智能地帮助您。
-
您能提供一些性能指标吗?时间、记忆等
-
还请包括表的大小和有关索引的信息。
-
@Ben 我已经添加了这些,请检查
-
@RyanGates 执行上述查询的时间为 2.5 秒,对于 194638 条记录,其他细节在执行计划中。
标签: sql performance oracle group-by aggregate-functions