Sql server SQL Server:在简单的select上运行非常慢的表

Sql server SQL Server:在简单的select上运行非常慢的表,sql-server,azure,query-optimization,Sql Server,Azure,Query Optimization,我正在处理Azure上的SQL Server,我发现了一个罕见的情况,即对单个表的查询速度非常慢,对于一个大约有1000行的表,查询速度超过10-12秒,而类似的表在不到1秒的时间内响应 表定义(脚本创建)为: (列Content\u ID、CultureCode和Version似乎是一个独特的组合,甚至在表中也没有这样设置。[ID]仅用作行标识符) 除了17列之外,所有的nvarchar(max),没有什么奇怪的 正如我所说,没有定义唯一性,没有索引 所以我调整为 CREATE TABLE [

我正在处理Azure上的SQL Server,我发现了一个罕见的情况,即对单个表的查询速度非常慢,对于一个大约有1000行的表,查询速度超过10-12秒,而类似的表在不到1秒的时间内响应

表定义(脚本创建)为:

(列
Content\u ID
CultureCode
Version
似乎是一个独特的组合,甚至在表中也没有这样设置。
[ID]
仅用作行标识符)

除了17列之外,所有的
nvarchar(max)
,没有什么奇怪的

正如我所说,没有定义唯一性,没有索引

所以我调整为

CREATE TABLE [dbo].[Content_optimized]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Content_ID] [int] NOT NULL,
    [CultureCode] [nvarchar](50) NOT NULL,
    [Version] [int] NOT NULL,
    [UserID] [int] NOT NULL,
    [Timestamp] [datetime] NOT NULL,
    [Title] [nvarchar](max) NOT NULL,
    [Subtitle] [nvarchar](max) NULL,
    ... 14 more [nvarchar](max) FIELDS...
    [NotesPlainText] [nvarchar](max) NULL,
)

CREATE INDEX IDX_dbo_Content_optimized__Content_ID 
       ON [dbo].[Content_optimized]([Content_ID])
CREATE INDEX IDX_dbo_Content_optimized__CultureCode 
       ON [dbo].[Content_optimized]([CultureCode])
CREATE INDEX IDX_dbo_Content_optimized__Version 
       ON [dbo].[Content_optimized]([Version])
CREATE INDEX IDX_dbo_Content_optimized__UserID 
       ON [dbo].[Content_optimized]([UserID])

ALTER INDEX ALL ON [dbo].[Content_optimized] REBUILD WITH (FILLFACTOR=90, ONLINE=ON) 
在这里,事情变得很奇怪,我甚至连一秒钟的执行时间都没有节省下来

实际上,代码是这样的:

select * 
from [Content]  
where Content_ID <> 1049 
order by Content_ID, Version

select * 
from [Content_optimized]  
where Content_ID <> 1049 
order by Content_ID, Version
选择*
从[内容]
其中Content_ID 1049
按内容、ID、版本排序
选择*
来自[内容优化]
其中Content_ID 1049
按内容、ID、版本排序
执行计划的执行率分别为53%和47%(由于索引的原因,速度仅提高了11%)

当然,我对SQL优化还比较陌生,所以这里有一些我没有看到的东西,可能是显而易见的,但我现在对它迷失了方向


有什么帮助吗?

可能只是那些nvarchar(max)列中的数据量。右键单击表>-Properties>-Storage,将表使用的数据空间与访问速度更快的表进行比较。是否可以在此处共享执行计划:。为什么所有内容都是varchar(max)?从列上的名称来看,我怀疑您是否需要允许这么多数据。当然,这些栏目中的大多数栏目的值可以限制在8000个字符以下?@TheGameiswar你为什么要求OP在外部网站上共享内容?这与StackOverflow上应该鼓励的做法相反。@DavidMakogon:我知道这已经做了很多次了,这不是一个坏的做法。您可以使用以下搜索项查看结果:site:dba.stackexchange.com brentozar.com/pastetheplan
select * 
from [Content]  
where Content_ID <> 1049 
order by Content_ID, Version

select * 
from [Content_optimized]  
where Content_ID <> 1049 
order by Content_ID, Version