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 调优的主要内容,如果未能解决你的问题,请参考以下文章

性能调优调优的常见思路和方法

性能调优调优的常见思路和方法

性能调优调优的常见思路和方法

Oracle 查询/SQL 调优

sql Oracle调优查询

Oracle SQL查询的性能调优