【问题标题】:Sql Server 2005 novice querySql Server 2005 新手查询
【发布时间】:2010-11-22 10:51:56
【问题描述】:

我是 SQL Server 2005 的初学者,我正在从在线教程中学习它,这是我的一些问题:

1:Select * from XYZ 和 Select ALL * from XYZ 有什么区别。

2:聚集索引的目的是通过对表进行物理排序来使搜索更容易[据我所知:-)]。假设表上有主列而不是在表上创建聚集索引好吗?因为我们已经有一列已排序。

3:为什么我们可以在一个表上创建 1 个聚集索引 + 249 个非聚集索引 = 250 个索引?我了解 1 个聚集索引的要求。但是为什么是249??为什么不超过 249 个?

【问题讨论】:

    标签: sql-server sql-server-2005 clustered-index


    【解决方案1】:
    1. SELECT ALL 是默认值,而不是 SELECT DISTINCT,没有区别

    2. 意见不一。出于性能原因,理想情况下,聚集索引应该小、稳定、唯一且单调递增。主键也应该是稳定和独特的,所以那里有一个明显的配合。然而,聚集索引非常适合范围查询。如果 PK 是非聚集的,则通过 PK 查找单个记录可以很好地执行,因此一些作者建议不要在 PK 上“浪费”聚集索引。

    3. 在 SQL Server 2008 中,您最多可以在一个表上创建 999 个 NCI。我无法想象这样做,但我认为限制被提高,因为“过滤索引”可能有这么多的可行案例。索引会增加数据修改操作的成本,因为更改需要在多个地方传播,所以我想它只会在很大程度上是只读(例如报告)数据库,甚至可以实现非聚集非过滤索引的两位数。

    【讨论】:

    • 感谢您的建议,第 1 点和第 2 点我很清楚。但我对第 3 点有点困惑,为什么表中有 999 个非聚集索引,为什么不是 900 或 1000?
    • @Zerotoinfinite - 唯一能回答的人是 SQL Server 开发人员!我在内部假设他们只分配有限的空间来存储此元数据,999 听起来是一个合理的限制。
    【解决方案2】:

    对于 3:

    每次在表中插入/删除记录时,所有索引都必须更新。如果索引过多,则需要很长时间。

    如果您的表有超过 5-6 个索引,我认为您需要花时间检查一下自己。

    【讨论】:

    • 感谢您的意见。但我对数字感到困惑。为什么只有249?为什么不是 248 或 251?
    • 我认为只有在表有聚集索引的情况下才必须更新所有索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多