- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们在 (A, B) 上有一个索引,在 (B, C) 上有一个索引。在进行如下查询时:
SELECT * FROM table WHERE A = const AND B = const ORDER BY C DESC
查询优化器是否会先在 (A,B) 索引中搜索以过滤 WHERE 类的行,然后再使用 (B, C) 索引进行快速排序?
或者查询仅限于一个索引?没有 B 树跳跃?
最佳答案
不,MySQL 不会执行您所描述的操作。
它将执行以下操作之一:
从 (A, B)
索引中读取,它将使用索引仅检查匹配的行,但需要额外的工作来执行文件排序以按 C
。
从 (B, C)
索引读取,它将以正确的顺序读取行,因此跳过文件排序。但它会检查许多具有不匹配的 A
值的额外行,并且它必须逐一评估这些行并丢弃那些不匹配的行。
您可以通过将 (A, B)
索引替换为 (A, B, C)
上的索引来优化两者,这将只检查匹配的行, 并按所需顺序阅读它们,因此不需要文件排序。
InnoDB 总是以某种索引顺序读取行。二级索引或聚簇索引。
回复你的问题:
通常,MySQL 只从一个索引中读取每个表引用。这允许例如使用自连接的查询,因此同一张表有多个表引用。每个表引用可能使用不同的索引进行读取。
例如,经理与其员工的自连接:
SELECT ...
FROM employees AS m
JOIN employees AS e ON e.manager_id = m.id
WHERE m.hire_date = '2020-01-01'
在此示例中,它可能会使用 hire_date
上的索引来选择经理,并使用 manager_id
上的索引来选择经理的下属。这是两个不同的表引用,因此它们是分开阅读的。
MySQL 还有一个特性叫做 index merge optimization ,它可能会读取表的两个子集,可能使用不同的索引,然后使用并集或交集合并结果。但我发现这种情况并不像您想象的那样经常发生。
关于 ORDER BY DESC,https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html说:
previously, indexes could be scanned in reverse order but at a performance penalty.
在 MySQL 8.0 中,他们实现了对声明索引以降序构建的支持,以支持 ORDER BY DESC 查询。但是索引是为这些查询量身定制的,并且对 ASC 查询使用相同的索引会受到影响。因此,您可能需要在同一个表的相同列上创建两个索引。阅读我链接到的文档页面以了解更多详细信息。
关于mysql - MySQL中有索引 "hopping"这样的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62521426/
假设我们在 (A, B) 上有一个索引,在 (B, C) 上有一个索引。在进行如下查询时: SELECT * FROM table WHERE A = const AND B = const ORDE
假设我们在 (A, B) 上有一个索引,在 (B, C) 上有一个索引。在进行如下查询时: SELECT * FROM table WHERE A = const AND B = const ORDE
我不知道如何最好地描述这个问题,所以这是一个附加的 gif。基本上,我有一个 Accordion 列表,一次只允许扩展一个元素。但是,当单击要展开的新元素时,较低的元素会“跳”起来,就好像展开和折叠的
我是 CSS 新手。 如何在页面的完整底部显示页脚 我在这个页面的问题:http://techdefeat.com/index.php .technology { min-height: 20
我正在尝试使用 JgraphT 为冗余拓扑创建网络图,我有兴趣让最近的节点到另一个节点,但拓扑不允许超过一定数量的跃点以避免循环。我想知道是否有一种方法可以快速获取顶点,类似于 closestFirs
我正在使用这个函数来移动光标。 [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y); 当我使用热键触发它时,
本文分享自华为云社区《HTTP请求转发那些事:你可能不知道的Hop-by-hop Headers和End-to-end Headers》,作者:蜉蝣与海。 引子 最近看到F5官方发布的公告,给出了一个
问题陈述: 通过creta@recog.vision.uni-bonn.de连接到machineB(木星)。我的问题最接近下面的链接1。但是,链接中的任何信息都无法使其正常工作。更糟糕的是,emacs
在我的情况下,我尝试使用Local App Server -> Middle Server (DMZ) -> Client Server 我需要将文件从Local App Server移到Client
我有一个函数,输入一个自由参数元组和一个固定参数元组,输出一个标量值。运行起来很昂贵,我想在不了解任何梯度/Hessians 的情况下找到这个函数的最小值。为此,我决定使用 Basin hopping
我遇到了 basin hopping algorithm在 scipy 中创建了一个简单的问题来了解如何使用它,但它似乎无法正确解决该问题。可能是我做的事情完全错了。 代码如下: import sci
我正在尝试解决 TCS MockVita 2019 Round 2 中提出的问题: 问题描述 高斯学校的数学老师 Felix Kline 博士介绍了以下游戏来教他的学生解决问题。他将一系列“跳石”(纸
有什么方法可以将 Node.js 脚本编译为 native 代码,就像 Hip-Hop 对 PHP 所做的那样? 我不是在谈论库/api。 最佳答案 Node.js 使用 Google 的 V8 ja
Write a program that simulates a computer network using discrete time. The first packet on each rout
假设你有这样的东西: template class HasDef { public: typedef D Def; }; class A : public HasDef {}; class
我得到了一个计算房间内 Wifi 设备数量的项目,我的研究使我获得了 TL-MR3020 并在其上安装了 OpenWRT。 我可以在监控模式下设置 mon0 就好了 airmon-ng start w
我是 Maven 和 Jackrabbit 的新手,我从 Apache 网站上给出的 FirstHops 示例开始,但我不确定应该选择哪个原型(prototype)代码来在 Maven 中创建这个项目
对于我正在安装的第三方应用程序,我需要设置一个 SFTP 连接: 基础应用程序是一个在 linux/JBOSS 机器(机器 A)上运行的 java 应用程序。此应用程序使用 (s)ftp 连接到第二台
我是一名优秀的程序员,十分优秀!