这篇 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 时候索引会失效,因为%表示全匹配,如果已经全匹配就不需要索引,还不如直接全表扫描。
最少空间原则
前面已经说过,当关键字占用的空间越小,则每个节点保存的关键字个数就越多,每次加载进内存的关键字个数就越多,检索效率就越高。创建索引的关键字要尽可能占用空间小。
下一篇: Go语言map