我有一个查询,在生产中运行大约2-4分钟,但在开发时运行几秒钟。这两个数据库都在同一个服务器上。 (没有关于开发和生产的讲座,生产仍然在开发中)。
我的意思是,我可以打开两个查询窗口并始终获得两个不同的结果。我运行了RedGate SQLCompare并且没有架构差异(索引等)的区别。我已禁用连接到数据库的站点,因此除了我的Management Studio会话之外不应该有任何连接。
可能导致这种情况的原因是什么?我通过复制生产数据库来创建开发数据库(在Management Studio中,右键单击数据库并单击“复制数据库”)
这真的很奇怪。我不想进行任何索引更改,因为奇怪的是副本速度非常快,但生产非常非常慢,但应该是基本上完全复制的。
答案 0 :(得分:7)
我不知道SQLServer的具体细节,但通常这种情况是由于两个数据库中的表统计信息不同。查看查询计划以查看它们是否不同。 运行SQLServer版本的“analyze table”或“analyze schema”命令。
如果这些操作无效,请检查数据库的设置方式。是否可能数据相同,但服务器配置不同,例如,生产版本的可用内存阈值要低得多?
要检查的其他内容 - 这只是我表现出的无知 - 但“复制数据库”实际上是复制数据还是仅仅是对象定义?
答案 1 :(得分:1)
您没有提供有关数据库结构或SQL查询的任何详细信息,但如果您确信两种环境的设置相同,那么它可能只是生产数据库中突出显示的大量数据一个效率低下的查询。
答案 2 :(得分:1)
好的,谢谢大家。我认为这个问题与索引碎片有关。我以为Copy Database基本上只是复制了文件。我在每张桌子上都做了一个DBCC DBREINDEX,现在它运行得很好。谢谢大家!
答案 3 :(得分:1)
在我的情况下,结果是因为生产数据库在场外(不同的城市)并且开发数据库在建筑物中。咄。该查询返回了大量数据,当然,这些数据在外部网络上需要更长的时间。我只是没有连接点,因为生产数据库比旧的开发框快得多,我们的大多数查询都没有返回足够的数据,网络成为速度因素。相反,生产箱的速度要快得多,即使网络连接速度较慢,大多数查询的返回速度仍然比开发箱快。
答案 4 :(得分:0)
尝试运行SQL事件探查器以查看在生产中运行的内容。
答案 5 :(得分:0)
默认情况下,红门会忽略统计数据和填充因子等内容。