我有一个包含约800万条记录的MS SQL表。在“ID”列上有一个主键(带有仅0.8%碎片化的聚集索引)。当我运行看似任何引用ID列的查询时,这些查询都需要很长时间(并且最终会使我的应用程序崩溃)。这包括简单的查询,例如“SELECT * FROM table WHERE ID=2020”。相比之下,不引用ID的查询(例如“SELECT TOP 100 * from table”)则没有问题。
您有什么想法?
您有什么想法?
如果查询需要10分钟(!?!),那么你肯定出了严重的问题。即使是对800万条记录进行表扫描,也应该只需要一两秒钟的时间。我建议检查事件日志以寻找即将出现的硬件故障的迹象,或者尝试将数据库移动到另一台服务器上,以查看是否存在其他硬件故障。
ID 是否是 GUID?SQL Server 在 GUID 列上的哈希生成存在问题,这使得它们在索引中表现不佳。
使用 Sql Server Management Studio 获取您的确切查询并抓取“估计执行计划”。如果您的查询触发了表扫描(本不应该),那么这就可以解释时间问题。也许计划可以向您展示其他正在发生的事情。
我假设您已经重建了索引(根据您的 0.8% 碎片化评论)。
我猜如果您正在使用默认的读取级别,并且您具有长时间运行的更新操作,您也可能会遇到死锁?这肯定也会引起此问题。