mysql – 什么是“松散索引扫描”?
作者:互联网
我读到由于没有“松散索引扫描”,MySQL无法在2个范围条件下使用索引.
“松散索引扫描”究竟是什么意思?
解决方法:
从High Performance MySQL第三版开始,
Loose Index Scans
MySQL has historically been unable to do loose index scans, which scan noncontiguous ranges of an index. MySQL’s index scans generally require a defined start point and a defined end point in the index, even if only a few noncontiguous rows in the middle are really desired for the query. MySQL will scan the entire range of rows within these
end points.
松散的索引扫描只是一个跳过部分索引的扫描.它是如何做到的?假设(a,b)上的索引松散索引扫描允许您查询b的特定值而不扫描b的所有值.它通过从b搜索范围的开始处开始,然后向后跳过以找到新的a来完成此操作.将其与(紧)索引扫描进行比较,其中扫描整个索引并且没有回溯.
在这种情况下回溯通常意味着在树上(向后)向上移动到前一个位置.
I was reading that MySQL can not use an index on 2 range conditions due to not having a “loose index scan”
我认为这不是真的.它(大多数RDBMS)可以使用索引,但是如果没有松散索引扫描的实现,它们将不得不扫描整个索引,就像在仅索引扫描中一样.这节省了必须访问该表.这可能是也可能不是理想的操作(在无论如何都必须访问表的情况下),当选择性低时,或者当索引足够接近表的大小时,它根本无关紧要.
也可以看看
> MySQL 8: Group by Optimization – Loose Index Scan
> PostgreSQL Method (with a Recursive CTE)
脚注
>我不确定该书关于MySQL的陈述是否仍然准确,因为该书于2012年印刷并涵盖MySQL 5.5.
标签:mysql,terminology,index 来源: https://codeday.me/bug/20190806/1598348.html