MySQL索引道理与应用:索引范例,存储布局与锁
行使索引对功效举办排序,必要索引的次序和 ORDER BY 子句中的次序同等,而且全部列的起落序同等(ASC/DESC)。假如查询毗连了多个表,只有在 ORDER BY 的列引用的是第一个表才可以(必要按序 JOIN)。
like 前缀 对付 like 前缀,其是指在行使 like 查询时,假如行使的表达式为 first_name like 'rMq%';那么其是可以用到 first_name 字段的索引的。可是对付 first_name like '%Chu%';,其就无法行使 first_name 的索引。对付 like 前缀,MySQL 底层现实上是行使了一个补全计策来行使索引的,好比这里 first_name like 'rMq%';,MySQL 会将其补全为两条数据:rMqAAAAA 和 rMqzzzzz,后头补所有门的长度为当前字段的最大长度。在行使索引查询时,MySQL 就行使这两条数据举办索引定位,最后必要的功效集就是这两个定位点的中间部门的数据。如下是行使 like 前缀的一个表示图: 字符串前缀 字符串前缀索引指的是只取字符串前几个字符成立的索引。在举办查询时,假如一个字段值较长,那么为其成立索引的本钱将很是高,而且查询服从也较量低,字符串前缀索引就是为了办理这一题目而存在的。字符串前缀索引首要应用在两个方面:
譬如为 first_name 字段成立了长度为 4 的前缀索引,可以看到,假如查询行使的是 where first_name='qWhNIZqxcbD';,那么 MySQL 起首会截取等值前提的前四个字符,然后将其与字符串前缀索引举办较量,从而定位到前缀为"qWhN"的索引片,然后获取该索引片对应的磁盘数据,最后将获取的磁盘数据的 first_name 字段与查询的等值前提的值举办较量,从而获得功效集。 字符串前缀索引最必要留意的一个题目是怎样选择前缀的长度,长度选择合当令,前缀索引的过滤性将和对整个字段成立索引的选择性险些相称。这里我们就必要用到前面讲授的关于字段选择性的观念,即字段选择性为对该字段分组之后,数据量最大的组的数据量占总数据量的比例。这里选择前缀长度时,可以领略为,前缀的选择性为凭证前缀分组之后,数据量最大的组占总数据量的比例。如下表所示为计较前缀长度的 SQL 公式:
其他索引 包围索引 包围索引指的是对付查询中行使的撤除参加索引过滤扫描的全部字段将其插手到该查询所行使的索引尾部的索引。包围索引扫描的利益在于因为查询中所行使的全部字段都在统一索引的字段,因而在举办查询时只必要在索引中获取相干数据即可,而不必要回磁盘扫描响应的数据,从而停止了查询中最耗时的磁盘 I/O 读取。对付如下查询:
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |