我有一个相同长度的本地和生产服务器上的 sql。当我在本地测试 sql 时,运行大约需要 2 秒,当我在生产或服务器上运行相同的东西时,运行大约需要 7 秒。
为什么差别这么大?
我有一个相同长度的本地和生产服务器上的 sql。当我在本地测试 sql 时,运行大约需要 2 秒,当我在生产或服务器上运行相同的东西时,运行大约需要 7 秒。
为什么差别这么大?
导致 SQL 响应时间变化的主要因素(尤其是在连续运行几次相同的查询时)是缓存。实际上,可能同时有几个缓存效果在起作用:
您可以通过启用自动跟踪并分析其输出来确定到底发生了什么。如果您第一次看到很多递归调用,而随后没有(或更少),这会告诉您代码缓存(光标共享会阻止您每次解析)。如果您第一次看到大量物理读取,但随后却少得多,那么就是数据库缓冲区缓存在起作用。如果物理读取的数量保持不变,但经过的时间发生了变化,那么它可能是低级数据缓存(操作系统或硬件)。
当然,还有其他因素可能会影响经过的时间——例如数据库工作量——但如果您在短时间内观察到这一点,那么可能不是这些因素。
还有两种方法可以解决这个问题,您所做的是通过缓存表运行 proc,这将使其更快,或者只是对其进行索引