将额外(精炼)索引添加到SQL Server表

我仍然在学习索引的更精细的点,这是我看不到的需要。 希望社区能够指引我走向正确的方向。

该表有6个以上的字段。

Field1是一个独特的区域,是PK。 Field2和3也是唯一标识符。 其余的都是varchar / ints,而且就我所能看到的而言是不相关的。

该表上已放置三个索引:Field2上的群集PK非群集非唯一Field2上的非群集非群集和Field3

任何索引都没有包含列。

我的问题是,是否有任何理由在field2上使用单个索引? 我的理解是,如果有两列或一列,索引的索引应该没有区别?


你是对的。 考虑到Field2和Field3上索引的存在以及包含的列是相同的(即没有),我认为只有Field2上的索引有用的原因很少。

  • 为了确保Field2是唯一的(如果它是唯一的索引) - 假设Field2是唯一标识符,这是非常不可能的
  • 深奥的性能原因(从技术上讲,Field2的索引会更小,因此I / O负担会更小)。
  • 神秘的锁定原因
  • 鲟鱼的定律表明它可能没有做任何有用的事情,但墨菲定律表明,消除它会破坏某些东西。


    定义索引中的列数(数据)增加,这意味着索引大小将成比例地增加。 所以建议主键(索引)应该在小/整数字段上创建。

    例如想象你在三列上搜索一张桌子

    州,县,邮编。

    你有时只能按州进行搜索。 你有时候会按州和县进行搜索。 你经常按州,县,邮编搜索。 然后是一个包含州,县,邮编的索引。 将用于所有这三项搜索。

    如果您通过zip进行搜索相当多,那么上面的索引将不会被使用(无论如何由SQL Server使用),因为zip是该索引的第三部分,查询优化器不会将该索引视为有用的。

    然后你可以在这个实例中使用Zip来创建一个索引。

    我猜你正在寻找的答案是它取决于你经常使用的查询的where子句以及你的group by。


    Field1有一个索引,因为它已被命名为主键,并且可能具有缺省值newid()。 它必须是独一无二的。

    Field2有一个索引的原因是因为它是一个外键,并且很可能在许多where子句和内部联接语句中找到。

    不知道为什么Field3收到一个索引,但如果它在任何where子句中使用,那么它就很好。

    索引都是关于快速查找信息的。 检查所有的where子句,并根据您的个人需求确定最佳索引。

    链接地址: http://www.djcxy.com/p/59313.html

    上一篇: Adding Extra (refined) indexes to SQL Server table

    下一篇: Improve SQL Server query performance on large tables