Sql server SQL Server:在简单的select上运行非常慢的表
我正在处理Azure上的SQL Server,我发现了一个罕见的情况,即对单个表的查询速度非常慢,对于一个大约有1000行的表,查询速度超过10-12秒,而类似的表在不到1秒的时间内响应 表定义(脚本创建)为: (列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 [
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