【发布时间】:2010-11-28 10:28:25
【问题描述】:
- 什么是索引覆盖(又名覆盖索引)技术?
- 在考虑整体性能时,它们的使用有哪些优点/缺点?
【问题讨论】:
-
MySQL 和 SQL Server?答案可能会有所不同...
标签: mysql sql-server
【问题讨论】:
标签: mysql sql-server
创建覆盖索引背后的原因是,所有需要输出或在查询的 where 子句中引用的列都存在于 Index 数据结构“内”(作为索引键或作为included 列)。
这反过来意味着数据库引擎不需要检索任何额外的数据库数据页来满足您的查询需求。简而言之,这意味着在绝大多数情况下查询会更快。
有一个很好的参考,SQL Server Optimization,它提供了 SQL Server 中覆盖索引示例的解释。
这是一个关于 MySQL 的精彩讨论:How to exploit MySQL index optimizations
现在考虑缺点时,这是一个有趣的问题,假设我们有一个非常宽的表,并且为了为您的查询创建一个覆盖索引,您必须合并 20 个大型数据类型列,您的索引可能很快变得非常大。然后,您需要权衡与索引维护和表插入/更新成本相关的性能增益。这将是其中之一,这取决于(取决于工作负载模式、使用的数据等)情况。
【讨论】:
除了约翰的回答:
优点:如果可以从覆盖的字段中回答查询,则访问速度更快,因为不需要访问该行。
缺点:更新速度较慢,因为需要更新索引中的更多数据。
【讨论】: