我遇到了查询结果的问题。结果在实时环境和测试环境中并不相同。
表A
id, name
1,ValueA1
表B
Id, name
1,ValueB1
2,ValueB2
3,ValueB3
4,ValueB4
在测试环境中,结果为ValueB1,在实时环境中为ValueB2
经过快速调查后,我发现问题在于该程序使用top 1
而没有一起订购。好的,对于每个人来说,如果我们使用前1,我们必须添加order by子句,这一点很清楚。
但我试图向非技术人员解释这个问题。
所以我写了一个带有1 000 000次迭代的简单while循环。我明确了执行计划:
DBCC FREEPROCCACHE
和
sp_recompile 'ProcedureName'
然后我正在执行程序。
不幸的是结果总是一样的。在这两种环境中。 (在测试中:ValueB1,在live:ValueB2上)
我尝试更改调用过程以仅复制过程的内容。 结果仍然与之前的情况完全相同。
我尝试用top 1编写一个非常简单的连接查询而不进行排序。两个服务器上的时间相同的结果:所有1M次迭代中的ValueB1。
db过程非常复杂,它使用CTE并且多次连接到表B.
我非常沮丧,因为我没有设法向非技术人员展示问题。
任何人都可以解释我做错了什么或应该怎么做?
答案 0 :(得分:0)
你不能。
如果您没有指定order by子句,则引擎可以自由地将结果发送给您。
在实践中,这主要意味着它按聚集索引排序,但它不一定是!