对聚集和非聚集索引存在疑问

时间:2009-11-15 07:47:34

标签: windows-xp

我怀疑如果我的表没有主键,外键,唯一键等任何约束,那么我可以在表上创建聚簇索引吗?聚簇索引可以有douplicate记录吗? 我的第二个问题是我们应该在哪里使用非聚集索引以及何时在表中创建有用且有益? 我的第三个问题是如何在表中创建249非聚簇索引。这就是249列上创建非聚集索引的含义吗?

你能帮我解决一下我的困惑。

1 个答案:

答案 0 :(得分:0)

首先,聚簇索引的定义是它是磁盘上数据的物理排序。每次插入该表时,新记录将根据其在聚簇索引列中的值按顺序放置在物理磁盘上。因为它是磁盘上的物理位置,所以它是(A)表中最快速访问的列,但(B)只能为每个表定义一个聚簇索引。您用作聚簇索引的哪一列(或多列)取决于数据本身及其用途。主键通常是聚簇索引,尤其是在主键是顺序的情况下(例如,随每个插入自动递增的整数)。这将提供最快的插入/更新/删除功能。如果您对执行读取更感兴趣(从表中选择*),您可能希望在Date列上进行聚类,因为大多数查询在where子句,group by子句或两者中都有日期。

其次,聚集索引(至少在我所知道的数据库中)不一定是唯一的(它们可以有重复)。将列限制为唯一是另外的事情。如果聚簇索引是主键,则其唯一性是作为主键的函数。

第三,我无法关注249栏的问题。非聚集索引基本上是一种以额外磁盘空间为代价来加速查询的工具。很难想到需要在每列上创建索引的情况。如果你想要一个快速的经验法则......

  1. 使用您的表格撰写查询。
  2. 如果需要列进行连接,请将其编入索引。
  3. 如果在where列中使用了列,请将其编入索引。
  4. 请记住,所有索引正在为您做的是加快查询速度。如果查询运行得很快,请不要担心它们。

    这只是一个大主题的缩略图。关于这个问题有大量更丰富/更全面的资源,有些依赖于数据库系统......只是google它。