什么是“松散索引扫描”?

Jim*_*Jim 6 mysql index terminology

我读到 MySQL 无法在 2 个范围条件下使用索引,因为没有“松散索引扫描”。

“松散索引扫描”到底是什么意思?

Eva*_*oll 3

高性能 MySQL第三版开始,

\n\n
\n

松散索引扫描\n MySQL 历来无法执行松散索引扫描,即扫描索引的非连续范围。MySQL\xe2\x80\x99s 索引扫描通常需要在索引中定义一个定义的起点和一个定义的结束点,即使查询真正需要中间的一些不连续的行。MySQL 将扫描这些端点内的整个行范围。

\n
\n\n

松散索引扫描只是跳过部分索引的扫描。它是如何做到的?假设松散索引扫描上的索引(a,b)允许您查询 的特定值,而b无需扫描 的所有值b。它通过从搜索范围的开头开始b,然后向后跳来查找新的a. 将此与(紧密)索引扫描进行比较,其中扫描整个索引并且没有回溯。

\n\n

在这种情况下回溯通常意味着在树上向上移动(返回)到先前的位置。

\n\n
\n

我读到 MySQL 无法在 2 个范围条件下使用索引,因为没有“松散索引扫描”

\n
\n\n

我认为这从来都不是真的。它(大多数 RDBMS)可以使用索引,但如果没有松散索引扫描的实现,它们将不得不扫描整个索引,就像在仅索引扫描中一样。这样就省去了去餐桌的麻烦。当选择性较低时,或者当索引足够接近表的大小时,这可能是也可能不是理想的操作(在无论如何都必须访问表的情况下)事情。

\n\n

也可以看看

\n\n\n\n
\n\n

脚注

\n\n
    \n
  • 我不确定这本书关于 MySQL 的说法是否仍然准确,因为这本书是 2012 年印刷的,涵盖了 MySQL 5.5。
  • \n
\n