【问题标题】:Can I have more than one index on a database table?我可以在一个数据库表上拥有多个索引吗?
【发布时间】:2014-07-22 20:37:06
【问题描述】:

我在数据库表上有一个现有索引,并且我是索引的新手。

我想在 UniqueID 列(自动增量列)上放置一个聚集索引,因为有很多数据。

表上可以有第二个索引吗?

现有索引是一对多值:

USE [Archive]
GO
/****** Object:  Index [IX_CustomerWidget]    Script Date: 07/22/2014 16:27:32 ******/
CREATE NONCLUSTERED INDEX [IX_CustomerWidget] ON [dbo].[CustomerWidget] 
(
    [WidgetID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

添加索引也有什么害处 - 意思是如果它不正确,可以删除它而不会对数据造成损害?

【问题讨论】:

    标签: sql-server sql-server-2008 indexing


    【解决方案1】:

    是的。有一个聚集索引(数据在磁盘上的顺序)和非聚集索引来支持对数据库执行的查询或强制列的非静默性是完全正常的。

    例如,我可能在IdentityID 上有一个聚集索引,在Date 上有一个非聚集索引,因为我的所有查询都像这样:Where Date between @Start and @End

    【讨论】:

    • 既然您在Date(Where Date between @Start and @End) 上提出了范围查询,那么Date 上的聚集索引是否更合适
    • 与所有索引策略一样,它依赖于表是否仅追加,日期是否更改,数据是否删除。为表选择正确的索引是一项棘手的工作,可能需要大量考虑如何使用它。插入/更新/删除数据的方式与查询方式的不同模式都会影响索引的有效性。
    • +1。我要补充一点,一个潜在的危害是在进行表更新时增加了维护索引的开销。以及索引将使用的磁盘空间。并且在创建时可能会阻塞。
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2016-08-06
    • 2012-08-01
    • 2022-08-21
    相关资源
    最近更新 更多