欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

这篇 MySQL 索引和 B+Tree 文章通俗易懂!-创建索引的几个原则

最编程 2024-05-01 20:03:38
...

列的离散型

离散型的计算公式:count(distinct column_name):count(*),就是用去重后的列值个数比个数。值在 (0,1] 范围内。离散型越高,选择型越好。

如下表中各个字段,明显能看出Id的选择性比gender更高。

mysql> select * from user;
+----+--------------+------+--------+
| id | name         | age  | gender |
+----+--------------+------+--------+
|
 20 | 君莫笑       |   15 |      1 |
| 40 | 苏沐橙       |   12 |      0 |
|
 50 | 张楚岚       |   25 |      1 |
| 60 | 诸葛青       |   27 |      1 |
|
 61 | 若有人兮     |   38 |      0 |
| 64 | 冯宝宝       |   18 |      0 |
+----+--------------+------+--------+

为什么说离散型越高,选择型越好?

因为离散度越高,通过索引最终确定的范围越小,最终扫面的行数也就越少。

最左匹配原则

对于索引中的关键字进行对比的时候,一定是从左往右以此对比,且不可跳过。之前讲解的id都为int型数据,如果id为字符串的时候,如下图:

当进行匹配的时候,会把字符串转换成ascll码,如abc变成97 98 99,然后从左往右一个字符一个字符进行对比。所以在sql查询中使用like %a 时候索引会失效,因为%表示全匹配,如果已经全匹配就不需要索引,还不如直接全表扫描。

最少空间原则

前面已经说过,当关键字占用的空间越小,则每个节点保存的关键字个数就越多,每次加载进内存的关键字个数就越多,检索效率就越高。创建索引的关键字要尽可能占用空间小。