我对一个特定的WHERE
列使用Integer
限制来进行SELECT * FROM
查询,但是它总是超时而不会返回任何结果。但是当我使用其他列时,查询正常运行。我想知道为什么?
我不确定是否是因为特定列是Integer?
SELECT [REQUEST_ID], [SIGNUM], [MATNR], [TIMESTAMP]
FROM [TICKET_INFO]
WHERE [REQUEST_ID] = 0
这不起作用并且总是超时,但是此查询正常工作:
SELECT [REQUEST_ID], [SIGNUM], [MATNR], [TIMESTAMP]
FROM [TICKET_INFO]
WHERE [SIGNUM] = '#'
答案 0 :(得分:0)
该问题可能与缓存的查询计划有关,对于某些参数版本而言,这是可以的,但对于其他参数版本而言,则不是。 您可以尝试一些步骤来解决此问题。首先重建所有索引,并确保有关非索引的统计信息是最新的。 请尝试以下操作:
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go
exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go
如果这不起作用,请尝试:
答案 1 :(得分:0)
我怀疑Request_ID将是Character数据类型,并且您正在尝试将其与整数进行比较。因此,它必须为每一行强制转换数据并进行比较。
我建议您以这种方式更新查询。
SELECT [REQUEST_ID], [SIGNUM], [MATNR], [TIMESTAMP]
FROM [TICKET_INFO]
where [REQUEST_ID] = '0'
此外,请阅读此stackoverflow答案Casting integer to Varchar
答案 2 :(得分:0)
在检查它是否被其他人锁定之后,与此服务器的所有连接都处于休眠状态, 这表示所有连接均正常。 然后,我通过配置管理重新启动服务器,它可以正常查询。 所以方法是RESTART SERVER。