在MsSql(和大多数其他关系数据库)中,“复合索引”是一个具有多个键的索引。假设我们有一个经常运行的查询,我们想为这个查询创建一个覆盖索引,以加快查询速度;

SELECT a, b FROM MyTable WHERE c = @val1 AND d = @val2

这些都是可能覆盖此查询的复合索引;

CREATE INDEX ix1 ON MyTable (c, d, a, b) CREATE INDEX ix2 ON MyTable (c, d) INCLUDE (a, b) CREATE INDEX ix3 ON MyTable (d) INCLUDE (a, b, c) CREATE INDEX ix4 ON MyTable (c) INCLUDE (a, b, d)

但看起来,他们的表现并不相同。根据Erlan Sommarkog(微软MVP)的说法,前两名比第三名和第四名更快,第四名比第3名更快。

他接着解释;

ix2是“最佳”索引,因为a和b不会占用索引树较高级别的空间。此外,如果更新了a或b,在ix2中不会出现页面拆分或类似情况,因为索引树不受影响。

然而,我很难理解到底发生了什么。我确实对b树索引及其工作原理有一般的了解,但我不理解复合键背后的逻辑。例如

CREATE INDEX ix1 ON MyTable (c, d, a, b)

这里的列顺序重要吗?如果是,为什么?而且

CREATE INDEX ix2 ON MyTable (c, d) INCLUDE (a, b)

这个复合键和上面的键有什么区别?我不明白“INCLUDE”有什么不同。

复合索引、“Include”关键字及其工作方式的更多相关文章

  1. iOS开发中使用SQL语句操作数据库的基本用法指南

    这篇文章主要介绍了iOS开发中使用SQL语句操作数据库的基本用法指南,包括一些常用SQL语句的整理,需要的朋友可以参考下

  2. 使用PHP反射机制来构造"CREATE TABLE"的sql语句

    今天小编就为大家分享一篇关于使用PHP反射机制来构造"CREATE TABLE"的sql语句,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】

    这篇文章主要介绍了PHP7使用ODBC连接SQL Server2008 R2数据库,结合实例形式分析了基于thinkPHP5.1框架使用ODBC连接SQL Server2008数据库相关操作技巧,需要的朋友可以参考下

  4. Python创建SQL数据库流程逐步讲解

    会写SQL很重要,能高效地查询数据库被认为是数据分析师/科学家最基本的技能之一。SQL不仅重要,而且非常常用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  5. PHP实现单条sql执行多个数据的insert语句方法

    今天小编就为大家分享一篇PHP实现单条sql执行多个数据的insert语句方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  6. 基于PHP实现原生增删改查的示例代码

    这篇文章主要介绍了如何利用php写个原生增删改查功能,文中的示例代码讲解,对我们学习PHP有一定帮助,感兴趣的小伙伴可以了解一下

  7. 浅谈laravel框架sql中groupBy之后排序的问题

    今天小编就为大家分享一篇浅谈laravel框架sql中groupBy之后排序的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. php简单实现sql防注入的方法

    这篇文章主要介绍了php简单实现sql防注入的方法,涉及addslashes函数的使用及正则过滤的相关技巧,非常简单实用,需要的朋友可以参考下

  9. MyBatis核心源码深度剖析SQL语句执行过程

    这篇文章主要介绍了MyBatis核心源码深度剖析SQL执行过程,mybatis执行SQL的流程都是根据statement字符串从configuration中获取对应的mappedStatement,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧

  10. MyBatis中关于SQL的写法总结

    这篇文章主要介绍了MyBatis中关于SQL的写法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

随机推荐

  1. 如何扩展ATmega324PB微控制器的以下宏寄存器?

    我目前正在学习嵌入式,我有以下练习:展开以下宏寄存器:如果有人解决了这个问题,我将不胜感激,以便将来参考

  2. Python将ONNX运行时设置为返回张量而不是numpy数组

    在python中,我正在加载预定义的模型:然后我加载一些数据并运行它:到目前为止,它仍在正常工作,但我希望它默认返回Tensor列表,而不是numpy数组。我对ONNX和PyTorch都是新手,我觉得这是我在这里缺少的基本内容。这将使转换中的一些开销相同。

  3. 在macOS上的终端中使用Shell查找文件中的单词

    我有一个文本文件,其中有一行:我需要找到ID并将其提取到变量中。我想出了一个RexEx模式:但它似乎对我尝试过的任何东西都不起作用:grep、sed——不管怎样。我的一个尝试是:我为这样一个看似愚蠢的问题感到抱歉,但我在互联网上找不到任何东西:我在SO和SE上读了几十个类似的问题,并在谷歌上搜索了几个教程,但仍然无法找到答案。欢迎提供任何指导!

  4. react-chartjs-2甜甜圈图中只有标题未更新

    我正在使用react-chartjs-2在我的网站中实现甜甜圈图。下面是我用来呈现图表的代码。我将甜甜圈图的详细信息从父组件传递到子组件,所有道具都正确传递。当我在beforeDraw函数外部记录props.title时,它会记录正确的值,但当我在beforeDraw函数内部记录props.title时,它将记录标题的前一个值,从而呈现标题的前值。我在这里做错了什么?

  5. 如何在tkinter中使用Python生成器函数?

    生成器函数承诺使某些代码更易于编写。但我并不总是知道如何使用它们。假设我有一个斐波那契生成器函数fib(),我想要一个显示第一个结果的tkinter应用程序。当我点击“下一步”按钮时,它会显示第二个数字,依此类推。我如何构建应用程序来实现这一点?我可能需要在线程中运行生成器。但如何将其连接回GUI?

  6. 如何为每次提交将存储库历史记录拆分为一行?

    我正在尝试获取存储库的历史记录,但结果仅以单行文本的形式返回给我。

  7. 尝试在颤振项目上初始化Firebase时出错

    当尝试在我的颤振项目上初始化firebase时,我收到了这个错误有人知道我能做什么吗?应用程序分级Gradle插件Gradle项目颤振相关性我已经将firebase设置为Google文档已经在另一个模拟器上尝试过,已经尝试过创建一个全新的模拟器,已经在不同的设备上尝试过了,已经尝试了特定版本的firebase,已经尝试添加但没有任何效果,已经在youtube上看到了关于它的每一个视频,该应用程序在android和iOS两个平台上都抛出了这个错误

  8. 在unix中基于当前日期添加新列

    我试图在unix中基于时间戳列在最后一个单元格中添加一个状态列。我不确定如何继续。

  9. 麦克斯·蒙特利。我一直得到UncaughtReferenceError:当我在终端中写入node-v时,节点未定义

    如果这是您应该知道的,请确认:我已将所有shell更改为默认为zsh。当我在终端中写入node-v时,我一直收到“UncaughtReferenceError:nodeisnotdefined”。但它显示节点已安装。我是个新手,在这方面经验不足。

  10. 如何在前端单击按钮时调用后端中的函数?

    那么如何在后端添加一个新的端点,点击按钮调用这个函数。

返回
顶部