我正在使用现有的sql Server(2008)应用程序,该应用程序存在许多性能和稳定性问题.开发人员通过索引做了一些奇怪的事情.我无法在这些问题上得到确定的基准,也无法在互联网上找到任何真正好的文档.
桌子上有许多可搜索的列.开发人员在每个可搜索列上创建了一个列索引.理论上说,在大多数情况下,sql Server能够组合(交叉)这些索引中的每一个以有效地访问表.
这是一个简化的例子(真实表有更多字段):
CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL,[col1] [nchar](12) NOT NULL,[col2] [int] NOT NULL,[col3] [varchar](2000) NOT NULL,... CREATE NONCLUSTERED INDEX [IndexCol1] ON [dbo].[FatTable] ( [col1] ASC ) CREATE NONCLUSTERED INDEX [IndexCol2] ON [dbo].[FatTable] ( [col2] ASC ) select * from fattable where col1 = '2004IN' select * from fattable where col1 = '2004IN' and col2 = 4
我认为针对搜索条件的多个列索引要好得多,但我可能错了.我见过查询计划,显示sql Server在两个索引搜索上进行哈希匹配.当你不知道如何搜索表时,这可能是有意义的吗?谢谢.
解决方法
但是,您可以应用一些经验法则. MSDN很好地介绍了基础知识:
> Index Design Basics
> General Index Design Guidelines
> Clustered Index Design Guidelines
> Nonclustered Index Design Guidelines
社区也提供了无数的文章,例如. Webcast Recording – DBA Darwin Awards: Index Edition.
并且具体回答您的问题:每列的单独索引都可以工作,前提是每列具有高选择性(许多不同的值,每个值在数据库中只出现几次).使用两个索引范围扫描之间的散列连接生成的访问计划通常可以很好地工作.具有低选择性的列(几个不同的值,每个值在数据库中出现多次)对于自己编制索引是没有意义的,查询优化器将简单地忽略它们.但是,低选择性色谱柱在与高选择性色谱柱配对时,可以多次制备出良好的复合键.
原文地址:https://www.jb51.cc/mssql/80640.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。