背景在 MySQL 中,当我们访问一个表时,有两种主要的数据访问方式:全表扫描(Full Table Scan)和索引扫描。索引扫描又可以分为全索引扫描(Index Scan)和范围索引扫描(Range Scan)。一般而言,范围索引扫描的效率高于全索引扫描,而全索引扫描的效率又高于全表扫描。当查询的 WHERE 条件中包含索引列的范围条件时,我们可以利用这些条件进行范围扫描,从而减少扫描次数。然而,并不是所有索引列的范围条件都能有效地利用范围扫描,尤其是在复合索引的情况下。示例分析:我们创建了一个表,有6列数据(为a, b, c, d, e, f),其中前5列组成一个复合索引。Case 1: Full Table Scan对上述table进行如下查询:select a,b,c,d,e,f from ss limit 10;得到的EXPLAIN计划如下:这个例子中我们访问了所有列,因此Mysql优化器选择了Full Table Scan的方式进行查询。Case 2: Index Scan将查询换成如下形式:select a,b,c,d,e from ss limit 10;得到的EXPLAIN计划如下:由于我们没有扫描f列,直接扫描索引即可获得查询所需的全部数据。因此优化器选择了index scan,即全索引扫描。Case 3: Range Scan将查询继续换成如下形式:sele
...
继续阅读
(10)