Sql server 2008 SQL Server查询超时

Sql server 2008 SQL Server查询超时,sql-server-2008,query-timeout,Sql Server 2008,Query Timeout,我创建了一个在SQLServer2008上运行的SQL查询。由于某些原因,它需要很长时间,并且超时 这是为测试目的而修改的查询。列FileData是一个varbinary(max),主键是ContentFileId。正如你所看到的,我只是试图选择一条特定的记录 SELECT *, CASE WHEN [CMS_tbContentFile].[FileData] IS NULL THEN ( SELECT [CMS

我创建了一个在SQLServer2008上运行的SQL查询。由于某些原因,它需要很长时间,并且超时

这是为测试目的而修改的查询。列
FileData
是一个
varbinary(max)
,主键是
ContentFileId
。正如你所看到的,我只是试图选择一条特定的记录

SELECT *,
       CASE
         WHEN [CMS_tbContentFile].[FileData] IS NULL 
         THEN (
                SELECT [CMS_tbContentFile2].[FileData]
                FROM   [CMS_tbContentFile] AS [CMS_tbContentFile2]
                WHERE  [CMS_tbContentFile2].[ContentFileId] = 2152  
              )
         ELSE [CMS_tbContentFile].[FileData]
       END AS [Test]
FROM   [CMS_tbContentFile]
WHERE  [CMS_tbContentFile].[ContentFileId] = 3054  
案例中的子查询(从[CMS\u tbContentFile]中选择[CMS\u tbContentFile2].[FileData]作为[CMS\u tbContentFile2],其中[CMS\u tbContentFile2].[ContentFileId]=2152)
本身运行良好,如果删除主查询的该部分,则主查询运行良好。只有
案例
和子查询的组合才导致问题


希望通过查看上面的内容,有人会看到问题,可能是T-SQL中不可能出现的此类查询的问题?

您没有给我们提供太多信息,但无论如何:子选择针对每一行运行,因此当您有1000个字段,其中[CMS\u tbContentFile].[ContentFileId]=3054时,它可以/将执行1000次

请尝试下面的代码,或者尝试将其重写为一个连接

declare @field varchar(255) //define here the same type as the [filedata] column has
select 
   @field = [cms_tbcontentfile2].[filedata] 
from 
   [cms_tbcontentfile] as [cms_tbcontentfile2]
where 
   [cms_tbcontentfile2].[contentfileid] = 2152

SELECT 
   *, 
   isnull([CMS_tbContentFile].[FileData], @field) as [Test]
FROM 
   [CMS_tbContentFile] 
WHERE 
   [CMS_tbContentFile].[ContentFileId] = 3054

你看过执行计划了吗?上面说什么?另外:您最近是否更新了表,例如插入了大量数据?那样的话,一定要坐在那张桌子上!即使是多行的情况,OP也会说“我只想选择一条特定的记录”,而不是你建议的1000条。谢谢@Michal Barcik,这就是我一直在寻找的答案!我忘记了子查询将针对每一行运行。我将更改我的查询。