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 SQL Server中的索引列_Sql Server_Indexing - Fatal编程技术网

Sql server SQL Server中的索引列

Sql server SQL Server中的索引列,sql-server,indexing,Sql Server,Indexing,我有下表 CREATE TABLE [dbo].[ActiveHistory] ( [ID] [INT] IDENTITY(1,1) NOT NULL, [Date] [VARCHAR](250) NOT NULL, [ActiveID] [INT] NOT NULL, [UserID] [INT] NOT NULL, CONSTRAINT [PK_ActiveHistory] PRIMARY KEY CLUSTERED ([ID] A

我有下表

CREATE TABLE [dbo].[ActiveHistory]
(
    [ID] [INT] IDENTITY(1,1) NOT NULL,
    [Date] [VARCHAR](250) NOT NULL,
    [ActiveID] [INT] NOT NULL,
    [UserID] [INT] NOT NULL,

    CONSTRAINT [PK_ActiveHistory] 
        PRIMARY KEY CLUSTERED ([ID] ASC)
)
每天大约有600000行被插入到表中,这意味着一个日期有300000个不同的活动,有大约500个不同的用户。我希望在一个表中有大约5年的历史,这意味着超过bln行,在5年的表中总共有大约4000个不同的用户ID和1000000个不同的活动。对我来说,在这张桌子上更快地工作是非常重要的

过去的大多数查询都使用date和userid连接,但在过去的几天中,我不得不经常使用activeid,但有时只能使用其中的两个(任意对)

我从不在加入时使用ID


现在我有了一个非聚集索引,其中userid和date作为索引键列,ID和ActiveID作为包含列,现在我的问题是-考虑到新的挑战,如何最好地安排此表的索引,只需添加所有选项,因为索引可能会占用大量空间,有时使用相同服务器的应用程序会受到CPU使用率达到99%的影响,我不确定新索引将如何影响这一点。

您需要/想要什么索引完全取决于您对表执行的查询类型。但是,如果您从未在
中使用
ID
,WHERE
上的
似乎是一个差劲的
聚集索引
候选者。另外,为什么您有一个名为
Date
的列不是日期和时间数据类型(它是
varchar(250)
)?如果不是日期和时间,那就不是日期;所以这个名字没有意义。我也想不出任何250个字符长的日期。最多27个字符(例如,2019-01-03T11:12:17.0000000’
),但这是一个字符串,而不是一个日期。请先使用适当的数据类型。
ActiveID
可以包含哪些类型的值?只是0和1吗?一旦您修复了所有的数据类型(包括前面提到的日期类型),您可能会发现集群coumnstore加快了速度。但问题是您正在运行什么查询?表是3年前创建的,现在我必须用rational属性重新创建表,Activeid应该是int,它是id(identity)对于另一个表,日期的示例是-'2019-01-03',我需要重新创建表以进行分析,我将创建新表,对于日期,可能最好使用散列字符串,我只需要日期,不需要时间。我将其更改为varchar(10)但在这个问题上,你的建议对我来说也很重要。关于ID,我也曾想过将其从索引中删除,但也许让ID作为非聚集索引的alocator是个好主意,因为我知道应该有unic alocator。再次感谢你抽出时间,新年快乐