首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server :如何使用昂贵的非聚集索引查找改进3连接查询

Server :如何使用昂贵的非聚集索引查找改进3连接查询
EN

Stack Overflow用户
提问于 2011-11-01 05:33:32
回答 1查看 822关注 0票数 0

我有一个查询,它使3个表的内部连接。

代码语言:javascript
复制
SELECT DISTINCT A.ID, <OTHER 'A' FIELDS> 
FROM C 
LEFT JOIN B ON C.Bin_ID = B.Bin_ID 
LEFT JOIN A ON B.App_ID = A.App_ID  
WHERE
   ((A.App_NAME LIKE '%%') AND (B.App_ID IS NOT NULL))  
ORDER BY 
    A.App_NAME ASC

上述表格中的数据->

  • 表A: 8000行
  • 表B: 900000行
  • 表C: 10,00000行

以下是从Server查询计划中显示的统计数据:

这里使用了两个昂贵的索引查找,上面的索引查找具有以下统计数据:

代码语言:javascript
复制
Object: B.App_ID [non clustered index, non unique] 
Seek Predicate: B.App_ID = A.App_ID[clustered index,unique]

底部索引查找具有以下统计数据:

代码语言:javascript
复制
Object: C.Bin_ID [non clustered index, non unique] 
See Predicate: C.Bin_ID = B.Bin_ID[clustered index,unique]

现在,这个查询平均需要5分钟才能执行,而且我无法弄清楚应该做什么,使它更快,因为查询已经使用了索引查找。{对于结果集来说,所有联接都是必需的。需要帮助!

EN

回答 1

Stack Overflow用户

发布于 2011-11-01 06:28:35

看起来,您只从表A中获取列,并且只检查表B中的现有行。

我想这会给你同样的结果,可能会更快一些:

代码语言:javascript
复制
SELECT A.ID--, <OTHER 'A' FIELDS> 
FROM A
WHERE
   A.App_NAME LIKE '%%' AND 
   A.App_ID IN (SELECT B.App_ID
                FROM B
                  INNER JOIN C
                    ON B.Bin_ID = C.Bin_ID)
ORDER BY 
    A.App_NAME ASC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7962827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档