SQL select 运行不出结果

疯狂的疯 2018-02-11 09:18:48
例子不好举,只能先贴下具体问题。
下边是查询出问题的语句。查询后 会卡在某条数据不动了。

SELECT i.ClientId --,p.*
FROM dbo.V_WMS_Inventory AS i
inner JOIN
(
SELECT prod.Id
FROM dbo.T_WMS_Product AS prod with(nolock) inner JOIN
dbo.T_CMN_Client AS c with(nolock) ON prod.ClientID = c.Id LEFT OUTER JOIN
dbo.T_WMS_Product_Category AS pc with(nolock) ON pc.Category = prod.ProdCategory
)p

ON i.ProductId = p.Id


单独查询 i 执行没有问题

单独执行p 也没有问题


欢迎各位大神来远程,可以直接加Q 915572879
...全文
1389 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
感谢各位的回复,结贴了。 具体原因虽然不清楚,但算是有了个方向。
zjcxc 2018-02-11
  • 打赏
  • 举报
回复
简单地说,就是子查询是做为一个整体参与外层查询(相当于子查核铁数据会先查出缓存到临时表),还是会被查询优化器分解和外层查询配合(不是单纯的执行子查询,是子查询的某些表可能先与外层查询 JOIN) LEFT JOIN 和 DISTINCT 的方式基本上会让查询优化器无法进行上述第2种情况的处理 而上述的第2种情况,在查询复杂或表中统计信息不准确,或数据分布不均等的情况下容易整出不佳的执行计划,所以一真强调要看看执行计划 关于执行计划的分析,可以看我在另一个地方的回复https://social.msdn.microsoft.com/Forums/zh-CN/626527ca-4d3e-4339-91d3-2cc88d913f85?forum=sqlserverzhchs
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
引用 13 楼 zjcxc 的回复:
你可以尝试把你的子查询加个 DISTINCT 试试 SELECT DISTINCT prod.id
加distinct 解决问题,希望大神留个原理。
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复


i是一个视图,嵌套比较多。


引用 12 楼 zjcxc 的回复:
你的 I 是视图吧? 看名称是 V 打头的,如果是的话,建议你看执行计划,猜测是一个复杂的执行计划,并不是你给出的语句这么简单的一个查询
zjcxc 2018-02-11
  • 打赏
  • 举报
回复
你的 I 是视图吧? 看名称是 V 打头的,如果是的话,建议你看执行计划,猜测是一个复杂的执行计划,并不是你给出的语句这么简单的一个查询
zjcxc 2018-02-11
  • 打赏
  • 举报
回复
你可以尝试把你的子查询加个 DISTINCT 试试 SELECT DISTINCT prod.id
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
i 中所有ProductId 都可以在 p的id 结果集中找到。

#t 为p 的临时表
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
引用 8 楼 zjcxc 的回复:
先试试 select count(*) 是否能出来,能的话数据是多少



直接执行count(1) 无法执行成功。
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
[quote=引用 3 楼 xiongxiongmi123 的回复:] 上边贴的SQL p 中 有with(nolock),有没有这个都会卡在一条数据上 不动。另外说下,数据库只执行这一个select。如果 将其中一个表查询结果放入临时表 然后做连接查询就没有问题。坐等各位大神。。
如果一个表查询了放临时表, 再连接查询, 最终的结果集有多少行?[/quote] 做临时表连接查询最终结果33724行。
zjcxc 2018-02-11
  • 打赏
  • 举报
回复
先试试 select count(*) 是否能出来,能的话数据是多少
吉普赛的歌 2018-02-11
  • 打赏
  • 举报
回复
引用 3 楼 xiongxiongmi123 的回复:
上边贴的SQL p 中 有with(nolock),有没有这个都会卡在一条数据上 不动。另外说下,数据库只执行这一个select。如果 将其中一个表查询结果放入临时表 然后做连接查询就没有问题。坐等各位大神。。
如果一个表查询了放临时表, 再连接查询, 最终的结果集有多少行?
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
--i 后加 with(nolock) 试试
SELECT i.ClientId --,p.*
FROM dbo.V_WMS_Inventory AS i WITH(NOLOCK)
INNER JOIN
(
SELECT prod.Id
FROM dbo.T_WMS_Product AS prod with(nolock) inner JOIN
dbo.T_CMN_Client AS c with(nolock) ON prod.ClientID = c.Id LEFT OUTER JOIN
dbo.T_WMS_Product_Category AS pc with(nolock) ON pc.Category = prod.ProdCategory
) AS p
ON i.ProductId = p.Id

i 加上nolock也是不行 还是一样的问题。

i查出来是33724行,p是26969行。
吉普赛的歌 2018-02-11
  • 打赏
  • 举报
回复
--i 后加 with(nolock) 试试
SELECT  i.ClientId --,p.*
FROM dbo.V_WMS_Inventory  AS i WITH(NOLOCK) 
      INNER JOIN 
      (
         SELECT       prod.Id 
         FROM         dbo.T_WMS_Product AS prod with(nolock) inner JOIN
                      dbo.T_CMN_Client AS c with(nolock) ON prod.ClientID = c.Id LEFT OUTER JOIN
                      dbo.T_WMS_Product_Category AS pc with(nolock)  ON pc.Category = prod.ProdCategory
      ) AS p
ON i.ProductId = p.Id 
吉普赛的歌 2018-02-11
  • 打赏
  • 举报
回复
i 和 p 查出来各有多少条?
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
上边贴的SQL p 中 有with(nolock),有没有这个都会卡在一条数据上 不动。另外说下,数据库只执行这一个select。如果 将其中一个表查询结果放入临时表 然后做连接查询就没有问题。坐等各位大神。。
疯狂的疯 2018-02-11
  • 打赏
  • 举报
回复
引用 1 楼 xiaoxiangqing 的回复:
是不是计算量很大,等查询完后,看一下执行计划
没法执行完,卡在最下边的那条数据后,就不动了、
xiaoxiangqing 2018-02-11
  • 打赏
  • 举报
回复
是不是计算量很大,等查询完后,看一下执行计划
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

22,207

社区成员

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

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