SQLServer选择查询性能问题

SQLServer选择查询性能问题,sql,performance,select,sql-server-2008-r2,select-query,Sql,Performance,Select,Sql Server 2008 R2,Select Query,我有一个select查询的性能问题。查询可能需要4分钟以上,这太长了。 此查询是在.Net客户端进程上启动的,但不是在Microsoft SQLServer Management Studio上启动的。所以它有时能用5秒,有时能用4分钟,1分钟,30秒。 所以我有3个问题: 为什么选择查询太长?因为使用sqlserver缓存,它可以在不到5秒钟的时间内释放缓存。我使用DBCC FREEPROCCACHE和DBCC DROPCLEANBUFFERS指令测试这个查询 为什么一个名为sort_init

我有一个select查询的性能问题。查询可能需要4分钟以上,这太长了。 此查询是在.Net客户端进程上启动的,但不是在Microsoft SQLServer Management Studio上启动的。所以它有时能用5秒,有时能用4分钟,1分钟,30秒。 所以我有3个问题:

  • 为什么选择查询太长?因为使用sqlserver缓存,它可以在不到5秒钟的时间内释放缓存。我使用DBCC FREEPROCCACHE和DBCC DROPCLEANBUFFERS指令测试这个查询

  • 为什么一个名为sort_init的sqlserver系统SQLTransaction重建索引需要30秒?我如何继续减少这一时间

  • 为什么在执行计划中,我有聚集索引扫描,而不是聚集索引搜索(扫描所有页面可能需要很长时间)。扫描的每个聚集索引都是每个表的主键。 注意:我还有很多查询使用这些表,这些表有聚集索引Seek on join子句。 我做错了什么?如何使查询运行得更快?如何优化索引
  • 我使用SQL Profiler跟踪问题,因此我有以下主要事件:

    A) SQL分析器:

    • SP:StmtCompleted:
    文本数据:

    `SELECT [DespatchNote].[Id], [DespatchNote].[RealType], [DespatchNote].[DbOwner], [DespatchNote].[Archived], [CreatedOn], [CreatedById], [UpdatedOn], [UpdatedById], [KeyingFinished], [IsValidated], [ValidatedOn], [ValidatedById], [Notes], [DefaultDisplayLanguageId], [ReferencedTransactionId], [TransactionNumber], [IsCanceled], [CanceledOn], [CanceledById], [TransactionType], [IsPending], [IsGenerated], [PrintCount], [LastPrintDate], [AttachedFile], [IsPointOfSalesTransaction], [IsAffiliatedTransaction], [IsDone], [DoneById], [DoneOn], [IsSent], [SentOn] FROM [DespatchNote] INNER JOIN [Flow] ON [DespatchNote].[Id] = [Flow].[Id] INNER JOIN [Transaction] ON [DespatchNote].[Id] = [Transaction].[Id] INNER JOIN [ProductsMovements] ON [DespatchNote].[Id] = [ProductsMovements].[Id] WHERE (([DespatchNote].[RealType] = @param42485) AND (([ProductsMovements].[IsDone] = @param42486) AND ([DespatchNote].[Archived] IS NULL)))`
    
    • 持续时间(毫秒)

      :201277

    • SQLTransaction:

    ObjectName:sort_init
    持续时间(毫秒):29982
    EventSubClass:1-Commit

    B) SHOWPLAN_全部打开时的查询

    C) 对于每个表,我启动DBCC SHOWCONTIG([MyTable]),因此:

    DBCC SHOWCONTIG分析表“事务”。。。 表:“交易”(770101784);索引ID:1,基本数据ID:5 分析niveau表格效应。 -页面分析:3690 -扩展分析:466 -延长通勤时间:526 MyEnne DES页PAR扩展……:7.9 -分析密度[Meilleur valeur:valeur réelle]……87.67%[462:527] -分析物流碎片:1.95% -碎片分析扩展:5.79% MyEnne D'Octs Listes Par Page……:631.1 -莫耶恩页密度(综合):92.20%

    DBCC SHOWCONTIG分析表“发货通知单”。。。 表:“发送通知”(1138103095);索引ID:1,基本数据ID:5 分析niveau表格效应。 -页面分析:409 -扩展分析:52 -延长通勤时间51 MyEnne DES页PAR扩展……:7.9 -分析密度[Meilleur valeur:valeur réelle]……100.00%[52:52] -分析物流碎片:0.00% -碎片分析扩展:5.77% MyEnne D'Octs Listes Par Page……:806.2 -莫耶恩页密度(综合):90.04%

    DBCC SHOWCONTIG分析表格“ProductsMovements”。。。 表:“产品运动”(1074102867);索引ID:1,基本数据ID:5 分析niveau表格效应。 -页面分析:1112 -扩展分析:139 -通勤延长线:138 MyEnne DES页PAR扩展……:8 -分析密度[Meilleur valeur:valeur réelle]……100.00%[139:139] -分析物流碎片:0.00% -碎片分析扩展:5.76% MyEnne D'Octs Listes Par Page……:725.6 -莫耶恩页密度(综合):91.03%

    DBCC SHOWCONTIG分析表“流量”。。。 表:“流量”(1890105774);索引ID:1,基本数据ID:5 分析niveau表格效应。 -页面分析:2662 -扩展分析:337 -延长通勤时间:343 MyEnne DES页PAR扩展……:7.9 -分析密度[Meilleur valeur:valeur réelle]……96.80%[333:344] -分析物流碎片:0.45% -碎片分析扩展:5.93% MyEnne D'Octs Listes Par Page……:579.2 -莫耶恩页密度(综合):92.84%

    D) 各表的详细信息:

    对于我数据库中的所有表,每个索引(聚集索引和非聚集索引)的总碎片小于10%

    发货通知:(本表36360行)(7列)  索引:主键发送通知(群集) IX3_DispatchNote_RealType(非唯一、非群集) FK_DispatchNote_存档(非唯一、非群集)  创建表的脚本:

    CREATE TABLE [dbo].[DespatchNote](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [IsSent] [bit] NULL,
        [SentOn] [datetime] NULL,
     CONSTRAINT [PK_DespatchNote] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[Transaction](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [Notes] [ntext] NULL,
        [DefaultDisplayLanguageId] [uniqueidentifier] NULL,
        [ReferencedTransactionId] [uniqueidentifier] NULL,
        [TransactionNumber] [nvarchar](40) NULL,
        [IsCanceled] [bit] NULL,
        [CanceledOn] [datetime] NULL,
        [CanceledById] [uniqueidentifier] NULL,
        [TransactionType] [int] NOT NULL,
        [IsPending] [bit] NOT NULL,
        [IsGenerated] [bit] NOT NULL,
        [PrintCount] [int] NOT NULL,
        [LastPrintDate] [datetime] NULL,
        [AttachedFile] [image] NULL,
        [IsPointOfSalesTransaction] [bit] NOT NULL,
        [IsAffiliatedTransaction] [bit] NOT NULL,
     CONSTRAINT [PK_Transaction] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_TransactionType]  DEFAULT (0) FOR [TransactionType]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsPending]  DEFAULT (0) FOR [IsPending]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  DEFAULT ((0)) FOR [IsGenerated]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_PrintCount]  DEFAULT ((0)) FOR [PrintCount]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsPointOfSalesTransaction]  DEFAULT ((0)) FOR [IsPointOfSalesTransaction]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsAffiliatedTransaction]  DEFAULT ((0)) FOR [IsAffiliatedTransaction]
    
    CREATE TABLE [dbo].[Flow](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [CreatedOn] [datetime] NULL,
        [CreatedById] [uniqueidentifier] NULL,
        [UpdatedOn] [datetime] NULL,
        [UpdatedById] [uniqueidentifier] NULL,
        [KeyingFinished] [bit] NULL,
        [IsValidated] [bit] NULL,
        [ValidatedOn] [datetime] NULL,
        [ValidatedById] [uniqueidentifier] NULL,
     CONSTRAINT [PK_Flow] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[ProductsMovements](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [IsDone] [bit] NULL,
        [DoneById] [uniqueidentifier] NULL,
        [DoneOn] [datetime] NULL,
     CONSTRAINT [PK_ProductsMovements] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    事务:(此表上136120行)(20列)  索引:PK_事务(集群) IX3_事务_RealType(非唯一、非群集) FK_事务\u引用事务ID(非唯一、非群集) FK_事务_DefaultDisplayLanguageId(非唯一、非群集) FK_事务_CanceledById(非唯一、非群集) FK_事务_已存档(非唯一、非群集)  创建表的脚本:

    CREATE TABLE [dbo].[DespatchNote](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [IsSent] [bit] NULL,
        [SentOn] [datetime] NULL,
     CONSTRAINT [PK_DespatchNote] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[Transaction](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [Notes] [ntext] NULL,
        [DefaultDisplayLanguageId] [uniqueidentifier] NULL,
        [ReferencedTransactionId] [uniqueidentifier] NULL,
        [TransactionNumber] [nvarchar](40) NULL,
        [IsCanceled] [bit] NULL,
        [CanceledOn] [datetime] NULL,
        [CanceledById] [uniqueidentifier] NULL,
        [TransactionType] [int] NOT NULL,
        [IsPending] [bit] NOT NULL,
        [IsGenerated] [bit] NOT NULL,
        [PrintCount] [int] NOT NULL,
        [LastPrintDate] [datetime] NULL,
        [AttachedFile] [image] NULL,
        [IsPointOfSalesTransaction] [bit] NOT NULL,
        [IsAffiliatedTransaction] [bit] NOT NULL,
     CONSTRAINT [PK_Transaction] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_TransactionType]  DEFAULT (0) FOR [TransactionType]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsPending]  DEFAULT (0) FOR [IsPending]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  DEFAULT ((0)) FOR [IsGenerated]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_PrintCount]  DEFAULT ((0)) FOR [PrintCount]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsPointOfSalesTransaction]  DEFAULT ((0)) FOR [IsPointOfSalesTransaction]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsAffiliatedTransaction]  DEFAULT ((0)) FOR [IsAffiliatedTransaction]
    
    CREATE TABLE [dbo].[Flow](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [CreatedOn] [datetime] NULL,
        [CreatedById] [uniqueidentifier] NULL,
        [UpdatedOn] [datetime] NULL,
        [UpdatedById] [uniqueidentifier] NULL,
        [KeyingFinished] [bit] NULL,
        [IsValidated] [bit] NULL,
        [ValidatedOn] [datetime] NULL,
        [ValidatedById] [uniqueidentifier] NULL,
     CONSTRAINT [PK_Flow] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[ProductsMovements](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [IsDone] [bit] NULL,
        [DoneById] [uniqueidentifier] NULL,
        [DoneOn] [datetime] NULL,
     CONSTRAINT [PK_ProductsMovements] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    流量:(本表136120行)(13列)  索引:主键流(集群)
    IX3_Flow_RealType(非唯一、非群集) FK_Flow_ValidatedById(非唯一、非群集) FK_Flow_UpdatedById(非唯一、非群集) FK_Flow_CreatedById(非唯一、非群集) FK_流_存档(非唯一、非群集)  创建表的脚本:

    CREATE TABLE [dbo].[DespatchNote](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [IsSent] [bit] NULL,
        [SentOn] [datetime] NULL,
     CONSTRAINT [PK_DespatchNote] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[Transaction](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [Notes] [ntext] NULL,
        [DefaultDisplayLanguageId] [uniqueidentifier] NULL,
        [ReferencedTransactionId] [uniqueidentifier] NULL,
        [TransactionNumber] [nvarchar](40) NULL,
        [IsCanceled] [bit] NULL,
        [CanceledOn] [datetime] NULL,
        [CanceledById] [uniqueidentifier] NULL,
        [TransactionType] [int] NOT NULL,
        [IsPending] [bit] NOT NULL,
        [IsGenerated] [bit] NOT NULL,
        [PrintCount] [int] NOT NULL,
        [LastPrintDate] [datetime] NULL,
        [AttachedFile] [image] NULL,
        [IsPointOfSalesTransaction] [bit] NOT NULL,
        [IsAffiliatedTransaction] [bit] NOT NULL,
     CONSTRAINT [PK_Transaction] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_TransactionType]  DEFAULT (0) FOR [TransactionType]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsPending]  DEFAULT (0) FOR [IsPending]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  DEFAULT ((0)) FOR [IsGenerated]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_PrintCount]  DEFAULT ((0)) FOR [PrintCount]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsPointOfSalesTransaction]  DEFAULT ((0)) FOR [IsPointOfSalesTransaction]
    GO
    
    ALTER TABLE [dbo].[Transaction] ADD  CONSTRAINT [DF_Transaction_IsAffiliatedTransaction]  DEFAULT ((0)) FOR [IsAffiliatedTransaction]
    
    CREATE TABLE [dbo].[Flow](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [CreatedOn] [datetime] NULL,
        [CreatedById] [uniqueidentifier] NULL,
        [UpdatedOn] [datetime] NULL,
        [UpdatedById] [uniqueidentifier] NULL,
        [KeyingFinished] [bit] NULL,
        [IsValidated] [bit] NULL,
        [ValidatedOn] [datetime] NULL,
        [ValidatedById] [uniqueidentifier] NULL,
     CONSTRAINT [PK_Flow] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [dbo].[ProductsMovements](
        [Id] [uniqueidentifier] NOT NULL,
        [Archived] [datetime] NULL,
        [RealType] [uniqueidentifier] NOT NULL,
        [DbOwner] [uniqueidentifier] NOT NULL,
        [RecordVersion] [timestamp] NOT NULL,
        [IsDone] [bit] NULL,
        [DoneById] [uniqueidentifier] NULL,
        [DoneOn] [datetime] NULL,
     CONSTRAINT [PK_ProductsMovements] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
    
    PRODUCTSMOVEMENTS:(此表上有83631行)(8列)  索引:PK_产品移动(集群) IX3_ProductsMovements_RealType(非唯一、非群集) FK_ProductsMovements_DoneById(非唯一、非群集) FK_专业版