前言
我出去给客户调优的时候,发现很多客户对数据库索引有一种误解。他们认为索引我们也知道啊,我也会建。调整下索引对系统性能不好有很好的提升。但实际上,等优化有结果对比发现,就是调整索引,让系统性能,有了5倍,10倍的提升。关于索引的使用,我有一些经验,但是觉得还是有很多需要学习的地方。 microsoft sqlserver 2012 internals 这本书非常不错。我会结合这本书的,和我自己的理解分享下这边书的内容。如果有必要可能会增加一些实际的案例,通过此方法,希望巩固自己的知识的同时,学习新的东西。正文
SQL Server没有一个配置选项或旋钮,可以直接使您能够运行得更快。然而,创建和设计适当的索引可能是最接近于灵丹妙药的东西。为正确查询创建的正确索引可以将查询执行时间从几小时缩短到几秒。绝对没有其他方法可以看到同等的收益;添加硬件或调整配置选项通常只会带来边际收益。那么索引可以使查询请求从数百万的I/O下降到只有几个呢?任何索引都能提高性能吗?不幸的是,良好的性能不会平白无故的发生,所有的索引都不是平等的,并且也不是所有索引都能提高性能。事实上,过度索引可能比不加索引性能更差。你不能简单粗暴的对每个列进行索引,并期望SQLServer改进。
那么,如何创建最佳索引呢?答案并不简单,需要考虑的东西很多。
了解您的数据分布,了解您的工作负载,了解SQL Server是如何工作的。 SQL Server涉及多个组件:索引内部、统计、查询优化和维护。 本章重点介绍索引内部和维护,扩展这些主题,以提供索引创建和最佳索引策略的最佳实践 通过了解SQL Server如何物理地存储索引以及存储引擎如何访问和操作这些物理结构,您可以更好地创建正确的索引
SQL Server 2012为索引提供了两种完全不同的存储类型。
1.索引可以被存储在一个特殊的树状结构,称为B-树。
2.每个索引列可以存储在它自己的部分,在一个结构叫做columnstore索引。
第一部分说明了B树索引的使用和概念,以及索引存储内部。学习索引是如何组织在磁盘上的。以及它们是如何用于数据检索的。
第二部分深入讨论数据修改时发生的情况,以及SQL Server如何保证一致性。在B树索引的数据修改的带来的潜在影响,如碎片。
第三部分讨论了索引管理和维护。
第四部分介绍columnstore索引、SQL Server 2012中的新增的,它的存储和管理和B-Tree索引完全不同
总结
觉得不错欢迎点赞,并留言