Sql server 每周大约有7000万次插入。我应该在我的列上使用什么索引?
我在SQLServer2012中有一个表,它在一周内获得了将近6600万次插入。我应该在哪些列上使用索引Sql server 每周大约有7000万次插入。我应该在我的列上使用什么索引?,sql-server,database,performance,database-indexes,Sql Server,Database,Performance,Database Indexes,我在SQLServer2012中有一个表,它在一周内获得了将近6600万次插入。我应该在哪些列上使用索引 create TABLE [dbo].[Details]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [WorkflowContentMetricsID] [bigint] not null, [ContentType] [nvarchar](1000) NULL, [SourceID] [nv
create TABLE [dbo].[Details](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[WorkflowContentMetricsID] [bigint] not null,
[ContentType] [nvarchar](1000) NULL,
[SourceID] [nvarchar](2000) NULL,
[DestinationID] [nvarchar](2000) NULL,
[ParentSourceID] [nvarchar](2000) NULL,
[Title] [nvarchar](max) NULL,
[Status] [nvarchar](max) NULL,
[Debug] [nvarchar](max) NULL,
[Metadata] [nvarchar](max) NULL,
[StatusCategory] [nvarchar](max) NULL,
[SangamWorkflowRunID] [nvarchar](1000) NULL,
[StartDateTime] [nvarchar](1000) NULL,
CONSTRAINT [PK_WorkflowContentDetails] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
我使用的查询是
SELECT ID
,WorkflowContentMetricsID
,ContentType
,SourceID
,DestinationID
,ParentSourceID
,Title
,[Status]
,Debug
,Metadata
,StatusCategory
FROM WorkflowContentDetails
WHERE ContentType NOT IN ('Image' , 'EntityList')
AND SangamWorkflowRunID = @SangamWorkflowRunID
And StatusCategory in (@StatusCategory)
如果仅用于插入(如您的问题所述),则不要在任何列上使用索引。表的索引越多,执行速度就越慢
insert
语句是唯一不能直接从索引中获益的操作,因为它没有WHERE
子句。索引对插入没有帮助-它们有害,因为它们也必须写入。如果只使用提供的一个查询查询表,请仅为该查询创建索引。它应该包括选择性列SangamWorkflowRunID
、StatusCategory
和ContentType
在这里似乎很有用
所提供的信息无法说明更多。我建议您花一点时间了解索引是如何工作的,以及它如何影响SELECT
和DML性能
对于插入本身,请使用SQL Server提供的一种大容量插入工具。66m行的插入不会花费特别长的时间。这取决于您打算运行的查询,而不是插入的数量。此插入是每天或每周进行的?它是每天进行的process@Ben如果我使用覆盖索引,那么这将需要很多时间,如果我没有wrong@ben这是正确的。由于表中不包含主键以外的约束,因此不需要索引来支持插入操作。要决定需要哪些索引来支持查询,您必须知道将运行哪些查询/运行频率。在这方面,插入和查询是不相关的。