Oracle 查询/SQL 调优
Posted
技术标签:
【中文标题】Oracle 查询/SQL 调优【英文标题】:Oracle Query/SQL tuning 【发布时间】:2013-07-31 06:40:25 【问题描述】:我有一个表,共有 198695 条记录和 96579 条记录,project_id = 555。 我列出了按 project_id 对表进行分区的间隔。 如果我运行下面的查询(没有不同),运行需要 0.75 秒。
SELECT KW,SEARCH_VOLUME,TARGET_URL,KEYWORD_TYPE,RANK_DATE,RANK,URL,DOMAIN
from alps_project_theme_kw_v where min_rank =1 and project_id = 555;
如果我添加 distinct 并运行以下查询,则需要 15 秒才能运行
SELECT distinct KW,SEARCH_VOLUME,TARGET_URL,KEYWORD_TYPE,RANK_DATE,RANK,URL,DOMAIN
from alps_project_theme_kw_v where min_rank =1 and project_id = 555;
现在不同查询和非不同查询获取的结果是相同的(1636 行) 谁能建议我应该如何进一步调整查询? 请注意:- 我只对上面提到的 project_id 上的表进行了分区并对其进行了分析,没有创建任何索引。
【问题讨论】:
【参考方案1】:我建议在 project_id 上添加索引将大大减少执行时间。如果您不想向基表添加索引,请将 o/p 复制到临时表,在临时表上创建索引,然后触发不同的查询,我敢打赌会快 15 秒。
【讨论】:
project_id 上的索引无济于事,因为我已经分区了相同的分区,所以使用分区会更有效,对吧?【参考方案2】: Use hints from oracle,
for e.g. SELECT /*+ INDEX(INDX1,IDX2) */ * FROM v;
for fast retrieval of data use
SELECT /*+ FIRST_ROWS(100) */ * FROM v;
try to use combination of column which are in same index
Refer :
http://docs.oracle.com/cd/B19306_01/server.102/b14211/hintsref.htm
【讨论】:
您是否建议在 project_id 上创建索引并在其上使用提示?我已经按 project_id 对表进行了分区 是的。但是如果 project_id 是主键,它已经被索引了。不建议在大型数据表上创建索引,因为它需要太多时间。 在 project_id 中创建索引并使用提示没有帮助。还有什么建议吗?? 索引列更快,因为数据以索引顺序存储,因此检索速度更快。使用多个表时,如果可能,通过修改查询而不是 DISTINCT 使用存在。以上是关于Oracle 查询/SQL 调优的主要内容,如果未能解决你的问题,请参考以下文章