多重索引与多重索引

我刚刚在SQL Server 2005中的表中添加了索引,这让我想到了。 创建1个索引和定义多个列,每个列中有1个索引需要索引的区别是什么?

有一些原因是为什么应该使用另一个?

例如

Create NonClustered Index IX_IndexName On TableName
(Column1 Asc, Column2 Asc, Column3 Asc)

Create NonClustered Index IX_IndexName1 On TableName
(Column1 Asc)

Create NonClustered Index IX_IndexName2 On TableName
(Column2 Asc)

Create NonClustered Index IX_IndexName3 On TableName
(Column3 Asc)

我同意Cade Roux。

这篇文章应该让你走在正确的轨道上:

  • SQL Server 2005/2008中的索引 - 最佳实践,第1部分
  • SQL Server 2005/2008中的索引 - 第2部分 - 内部
  • 有一点需要注意,聚簇索引应该有一个唯一的键(我推荐的标识列)作为第一列。 基本上它可以帮助您在索引末尾插入数据,而不会导致大量磁盘IO和页面分割。

    其次,如果你正在为你的数据创建其他索引,并且它们被巧妙地构建,它们将被重用。

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

    州,县,邮编。

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

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

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

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

    这篇文章会帮助很多。 :-)


    是。 我建议你查看Kimberly Tripp关于索引的文章。

    如果索引是“覆盖”的,那么就不需要使用索引以外的任何东西。 在SQL Server 2005中,还可以向索引中添加其他列,这些列不是可以消除行的其余行的键的一部分。

    拥有多个索引,每个索引都可能意味着只有一个索引被使用 - 您将不得不参考执行计划以查看不同索引方案提供的效果。

    您还可以使用调整向导来帮助确定哪些索引可以使给定的查询或工作负载表现最佳。


    多列索引可用于引用所有列的查询:

    SELECT *
    FROM TableName
    WHERE Column1=1 AND Column2=2 AND Column3=3
    

    这可以使用多列索引直接查找。 另一方面,至多可以使用单列索引中的一个(它必须查找所有具有Column1 = 1的记录,然后检查每个列中的Column2和Column3)。

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

    上一篇: Multiple Indexes vs Multi

    下一篇: Rails JQUERY Toggle with Nested Resources