inner join语句如何优化?

lifefamily 2009-04-27 01:49:45
我们有一个产品库cp,80万行;另外一个企业表qy,2万行。一个inner join查询,速度极慢。
CP表上有主键ID,cpmc也有索引,企业表qy上主键为ID,是聚集索引,companyid是非聚集索引。


只查询前120条
select top 120 a.id,a.jysm,a.cpmc,a.cpbh,a.sccj,a.cpcd,a.cpjg,a.qorder,b.trust from qy b inner join cp a on a.companyid=b.companyid where cpmc like '%电子笔%'
这个句子执行一般要10秒,经常要15秒

如果这样
select top 120 id,jysm,cpmc,cpbh,sccj,cpcd,cpjg,qorder from cp where cpmc like '%电子笔%'
1-2秒。

但看SQL执行计划中,都提示聚集索引扫描消耗大(70%以上),而inner join并没有提示消耗多少。这是为什么?
...全文
967 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsglijun 2009-04-27
  • 打赏
  • 举报
回复
用什么inner join咯。。。。
fcuandy 2009-04-27
  • 打赏
  • 举报
回复
首先问楼主个问题:

这两个表中,在cp中存在的companyid对应于qy表,应该都有对应的吧, 如果是这样的话, try:

SELECT 120 id,jysm,cpmc,cpbh,sccj,cpcd,cpjg,qorder
INTO #1
FROM cp
WHERE cpmc LIKE '%电子笔%'

SELECT b.id,b.jysm,b.cpmc,b.cpbh,b.sccj,b.cpcd,b.cpjg,b.qorder,a.trust
FROM qy a
INNER JOIN #1 b
ON a.companyid = b.companyid
--OPTION(FORCE ORDER) /*这里指定或不指定分别试一下*/
IAmXirour 2009-04-27
  • 打赏
  • 举报
回复
索引无效,不过你可以去掉条件看看join本身需要几秒,改变一下执行计划看看有没有可以调整的余地,
JonasFeng 2009-04-27
  • 打赏
  • 举报
回复
cpmc like '%电子笔%'
索引不起作用!


CompanyID 索引

htl258_Tony 2009-04-27
  • 打赏
  • 举报
回复
索引在以下情况使用将失效.
1.只要对列使用函数,该列的索引将不起作用,如:substring(aa,1,2)='xx'
2.只要对列进行计算,该列的索引将不起作用,如:aa+10=20
3.某些情况下的LIKE操作,该列的索引将不起作用,如:aa LIKE '%10%'
4.某些情况使用反向操作,该列的索引将不起作用,如:aa <>2
5.在WHERE中使用OR时,有一个列没有索引,那么其它列的索引将不起作用
htl258_Tony 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lifefamily 的回复:]
引用 2 楼 HEROWANG 的回复:
你的第一个要用到连接的。在连接的两个表的连接字段上建立索引。
cpmc like '%电子笔%' 这个就没办法用到索引了


都设置了索引了。
[/Quote]

设置索引了,但在这种情况下索引失效.
you_tube 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lifefamily 的回复:]
引用 2 楼 HEROWANG 的回复:
你的第一个要用到连接的。在连接的两个表的连接字段上建立索引。
cpmc like '%电子笔%' 这个就没办法用到索引了


都设置了索引了。
[/Quote]
cpmc like '%电子笔%'
%这个东东在前面不会用到索引了
lifefamily 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 HEROWANG 的回复:]
你的第一个要用到连接的。在连接的两个表的连接字段上建立索引。
cpmc like '%电子笔%' 这个就没办法用到索引了
[/Quote]

都设置了索引了。
  • 打赏
  • 举报
回复
你的第一个要用到连接的。在连接的两个表的连接字段上建立索引。
cpmc like '%电子笔%' 这个就没办法用到索引了
liangCK 2009-04-27
  • 打赏
  • 举报
回复
where cpmc like '%电子笔%'
--------
这个只能索引扫描...不能用到索引查找..所以肯定会慢的.

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧