将额外(精炼)索引添加到SQL Server表
我仍然在学习索引的更精细的点,这是我看不到的需要。 希望社区能够指引我走向正确的方向。
该表有6个以上的字段。
Field1是一个独特的区域,是PK。 Field2和3也是唯一标识符。 其余的都是varchar / ints,而且就我所能看到的而言是不相关的。
该表上已放置三个索引:Field2上的群集PK非群集非唯一Field2上的非群集非群集和Field3
任何索引都没有包含列。
我的问题是,是否有任何理由在field2上使用单个索引? 我的理解是,如果有两列或一列,索引的索引应该没有区别?
你是对的。 考虑到Field2和Field3上索引的存在以及包含的列是相同的(即没有),我认为只有Field2上的索引有用的原因很少。
鲟鱼的定律表明它可能没有做任何有用的事情,但墨菲定律表明,消除它会破坏某些东西。
定义索引中的列数(数据)增加,这意味着索引大小将成比例地增加。 所以建议主键(索引)应该在小/整数字段上创建。
例如想象你在三列上搜索一张桌子
州,县,邮编。
你有时只能按州进行搜索。 你有时候会按州和县进行搜索。 你经常按州,县,邮编搜索。 然后是一个包含州,县,邮编的索引。 将用于所有这三项搜索。
如果您通过zip进行搜索相当多,那么上面的索引将不会被使用(无论如何由SQL Server使用),因为zip是该索引的第三部分,查询优化器不会将该索引视为有用的。
然后你可以在这个实例中使用Zip来创建一个索引。
我猜你正在寻找的答案是它取决于你经常使用的查询的where子句以及你的group by。
Field1有一个索引,因为它已被命名为主键,并且可能具有缺省值newid()。 它必须是独一无二的。
Field2有一个索引的原因是因为它是一个外键,并且很可能在许多where子句和内部联接语句中找到。
不知道为什么Field3收到一个索引,但如果它在任何where子句中使用,那么它就很好。
索引都是关于快速查找信息的。 检查所有的where子句,并根据您的个人需求确定最佳索引。
链接地址: http://www.djcxy.com/p/59313.html