Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 每周大约有7000万次插入。我应该在我的列上使用什么索引?_Sql Server_Database_Performance_Database Indexes - Fatal编程技术网

Sql server 每周大约有7000万次插入。我应该在我的列上使用什么索引?

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

我在SQLServer2012中有一个表,它在一周内获得了将近6600万次插入。我应该在哪些列上使用索引

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这是正确的。由于表中不包含主键以外的约束,因此不需要索引来支持插入操作。要决定需要哪些索引来支持查询,您必须知道将运行哪些查询/运行频率。在这方面,插入和查询是不相关的。