从 SQL Server 中的大型表中选择不同/唯一的行而不会出现超时错误

从 SQL Server 中的大型表中选择不同/唯一的行而不会出现超时错误

我在 SQL Server 中有一个大约有 400,000 行的表。不幸的是,由于没有主键,该表有许多重复行。我用来SELECT DISTINCT获取所有唯一行,但由于行数太多,我不断收到超时错误。解决这个问题的最佳方法是什么?

答案1

好问题。改善超时 - 提高值。或者投入更多能力。从技术上讲,400,000 行并不多,因此对于一个不错的服务器来说,它会运行得非常快。否则 - 如果你因为“服务器”只有一个(一对)硬盘而遇到 IO 问题......那么你的 IO 会杀死你。

基本上,DISTINCT 会在 tempdb 中触发临时结果创建 - 因此它是 tempdb 繁重的。

但最后,我会增加超时时间,特别是如果这只是一次性操作。

顺便说一句,从这个角度来看 - 您谈论的 HUGH 表在哪里? 400.000 的大小微不足道。

答案2

加快速度的最佳解决方案是在需要选择的字段上添加索引。使用 select 语句时,数据库引擎必须在没有索引的情况下筛选结果,这实际上要求服务器遍历表中的每一行。

相关内容