新特性解读 | MySQL 8.0 索引特性1-函数索引 - 爱可生开源社
区 - OSCHINA
原创作者:杨涛涛
函数索引顾名思义就是加给字段加了函数的索引,这里的函数也可以是表达式。所以也叫表达式索引。
MySQL 5.7 推出了虚拟列的功能,MySQL8.0的函数索引内部其实也是依据虚拟列来实现的。
我们考虑以下几种场景:
1.对比日期部分的过滤条件。
SELECT ...
FROM tb1
WHERE date(time_field1) = current_date;
2.两字段做计算。
SELECT ...
FROM tb1
WHERE field2 + field3 = 5;
3.求某个字段中间某子串。
SELECT ...
FROM tb1
WHERE substr(field4, 5, 9) = 'actionsky';
4.求某个字段末尾某子串。
SELECT ...
FROM tb1
WHERE RIGHT(field4, 9) = 'actionsky';
5.求JSON格式的VALUE。
SELECT ...
FROM tb1
WHERE CAST(field4 ->> '$.name' AS CHAR(30)) = 'actionsky';
以上五个场景如果不用函数索引,改写起来难易不同。不过都要做相关修改,不是过滤条件修正就是表结构变
更添加冗余字段加额外索引。
比如第1个场景改写为,
评论