【问题标题】:Non-Clustered Index on all the columns所有列的非聚集索引
【发布时间】:2014-06-27 19:13:50
【问题描述】:

如果允许在一个表上创建 249 个非聚集索引,是否意味着在每一列上都有一个非聚集索引是安全的?那会有什么影响?或者我们必须只选择一些列来创建非聚集索引。

这是:

create nonclustered index ix_test(col1, col2, col3)

与此不同:?

create nonclustered index ix_test(col1)
create nonclustered index ix_test2(col2)
create nonclustered index ix_test3(col3)

【问题讨论】:

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


    【解决方案1】:

    索引对读取有利,对写入不利。

    当您只阅读数据时,索引可以帮助您更快地找到数据并加快阅读速度。

    另一方面

    当您写入数据(更新/删除/插入)时,sql server 将不得不在存储实际数据的 SQL Server Pages 上写入数据两次,一次为索引写入数据。这将导致写入速度变慢。

    您必须找到一个中间地带,在该中间地带,您的读取不会因帮助索引不足而受到影响,而您的写入不会因索引过多而受到影响。

    上述说法适用于 OLTP 应用程序,其中数据变化非常频繁,但如果它是 OLAP/数据仓库数据几乎不会发生变化,您可以添加读取所需的索引以更好地执行。希望这可以帮助。

    【讨论】:

    • 这就是为什么 unique/guid 是索引的好候选者,因为它们不会改变。
    • 我想你的意思是说 guid 是聚集索引的一个很好的候选者,其实不是。标识值是聚集索引的更好候选者。
    • 除了额外的维护开销之外,未使用和冗余的索引还会浪费空间。复杂的查询以及许多索引可能会导致编译时间超出必要的时间,有时还会导致计划不理想。
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2013-08-07
    • 2018-02-17
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多