option (force order)是什么作用啊

dd922 2011-10-20 01:03:23

SELECT
SUM(isnull(数量, 0)) AS 入库数
FROM
入出库
INNER JOIN 入出库明细
ON 入出库.管理NO = 入出库明细.管理NO
WHERE
AND 入出库.仓库CD = 1
AND 入出库明细.商品CD1 = 7096641
AND 入出库明细.商品CD2 = 0

执行需要8秒

SELECT
SUM(isnull(数量, 0)) AS 入库数
FROM
入出库
INNER JOIN 入出库明细
ON 入出库.管理NO = 入出库明细.管理NO
WHERE
AND 入出库.仓库CD = 1
AND 入出库明细.商品CD1 = 7096641
AND 入出库明细.商品CD2 = 0
option (force order)

执行只需要两秒
这是为什么呢
...全文
506 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL777 2011-10-20
  • 打赏
  • 举报
回复
才两个表连接而已啊。。看计划,难道你第一个入库明细还跑左表了?
--小F-- 2011-10-20
  • 打赏
  • 举报
回复
贴出你的具体 执行计划看看 。应该是执行顺序都不一样了
中国风 2011-10-20
  • 打赏
  • 举报
回复
1為 由數據庫引擎優化產生執行計劃

2為 強制以联接顺序產生執行計劃

有這麼難理解麼?

數據庫引擎自身優化不一定是最佳,所以會出現option (force order)由編寫者控制
nzperfect 2011-10-20
  • 打赏
  • 举报
回复
加上这句:
set statistics profile on
然后,贴出执行计划StmtText来看看
中国风 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dd922 的回复:]

那么第一种写法怎么改一下可以实现跟第二种写法一样的效果啊
[/Quote]
要學會查執行計劃,把有變動的用括號或on后加條件
dd922 2011-10-20
  • 打赏
  • 举报
回复
那么第一种写法怎么改一下可以实现跟第二种写法一样的效果啊
中国风 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dd922 的回复:]

这个语句只有两个表,和SQL的联接顺序没有关系吧
[/Quote]
查看執行計劃就知有沒有關係了,同引擎優化有關
dd922 2011-10-20
  • 打赏
  • 举报
回复
这个语句只有两个表,和SQL的联接顺序没有关系吧
Rotel-刘志东 2011-10-20
  • 打赏
  • 举报
回复
具体看一下执行计划了。
中国风 2011-10-20
  • 打赏
  • 举报
回复
option (force order)

FORCE ORDER

指定在查询优化过程中保持由查询语法指示的联接顺序。

http://msdn.microsoft.com/zh-cn/library/ms181714%28v=SQL.90%29.aspx

22,210

社区成员

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

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