如何优化SQL查询

时间:2015-09-21 08:21:11

标签: sql-server query-optimization

我有一个SQL Server表Top_Research_Areas,其中包含类似的数据

aid     res_category_id    research_area            Paper_Count     
---------------------------------------------------------------
2937    33                 markov chain             3               
2937    33                 markov decision process  1               
2937    1                  linear system            1               
11120   29                 aspect oriented prog     4               
11120   1                  graph cut                2               
11120   1                  optimization problem     2               
12403   2                  differential equation    7               
12403   1                  data structure           2               
12403   1                  problem solving          1               
35786   1                  complete graphs          11              
35786   1                  graph cut                10              
35786   NULL               NULL                     2               
49261   3                  finite automata          6               
49261   3                  finite element           2               
49261   14                 database                 2                
78841   5                  genetic programming      6               
78841   23                 active learning          2               
78841   28                 pattern matching         1                 

现在,我想从另一个表格中选择pidsub_aminer_paper选择表aid中的Top_Research_Areas,而表sub_aminer_paper包含列,即aidpidresearch_areares_category_id以及更多列。

此外Top_Research_Areas仅包含top_3 research_area的记录,而表sub_aminer_paper包含aid的{​​{1}}以外的记录以外的Top_Research_Areas 1}}。

我使用了这个查询,即

SELECT
    aid, pid, research_area
FROM
    sub_aminer_paper 
WHERE
    aid IN (2937, 11120)
    AND research_area IN (SELECT
                              research_area 
                          FROM 
                              Top_Research_Areas 
                          WHERE
                              aid IN (2937, 11120))
ORDER BY aid ASC

现在的问题是,当通过匹配两个表格中的pid来从sub_aminer_paper检索research_area时,它会向我提供输出,例如如果我检索两个aid的记录,即293711120,则会将输出显示为:

enter image description here

我们可以看到前2 Paper_Count的{​​{1}}是aid,即它应该提供3+1+1+4+2+2条记录,但它会给{{1}因为1314实际上属于表research_area中的optimization problemaid,而是使用11120子句进行匹配{{1}它将两个Top_Research_Areas的{​​{1}}混合在一起,而我在输出中需要IN个记录,而不是research_area

如何处理?

请帮助和谢谢!

1 个答案:

答案 0 :(得分:0)

可能有一篇论文关于"优化问题" for 2937,它没有登录top_research_Areas。

请参阅id this help:从sub_aminer_paper中选择(aid,research_area)的组合,

SELECT
    sap.aid, sap.pid, sap.research_area
FROM
    sub_aminer_paper  sap
WHERE
  sap.AID IN (2937, 11120) --- For indexing which I'm assuming this column has
  AND EXISTS (SELECT 1 FROM Top_Research_Areas tra WHERE tra.aid = sap.aid and tra.research_area = sap.research_area and tra.aid in (2937,11120))