2013-07-31 53 views
1

我有一个表格,其中包含总计198695条记录和96579条记录,其中project_id = 555。 我有列表间隔通过project_id分区表。 如果我运行下面的查询(没有不同),它需要0.75秒运行。Oracle查询/ SQL调优

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; 

而如果我添加不同并运行下面查询时,它需要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进行了分区,并对其进行了分析,没有创建任何索引。

回答

0

我建议在project_id上添加索引将大大减少执行时间。如果您不想向基表添加索引,请将o/p复制到临时表中,在临时表上创建索引,然后触发不同的查询,我敢打赌,速度会比15秒快。

+0

project_id上的索引不会帮助我认为因为我已经分区相同,所以使用分区会更有效吗? – user2342436

0
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 
+0

是你建议在project_id上创建一个索引并使用相同的提示?我已经通过project_id – user2342436

+0

分区了表。但是如果project_id的主键是已经索引的话。不建议在大数据表上创建索引,因为它需要太多时间。 –

+0

在project_id中创建索引并使用提示没有帮助。任何其他建议? – user2342436