在之前的版本中mysql中是没有函数索引的,所以对于在列上添加函数运算的查询只能走全表扫,在57中虽然没有明确的函数索引创建方式,但是可以通过虚拟列的方式变相实现。下面的例子是在oow大会中学习到的。
mysql> show create table employees;
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| employees | CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` enum('M','F') NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

在MySQL 5.7之前,无法直接为函数运算创建索引,导致涉及函数的查询效率低下。但5.7版本中,通过虚拟列可以间接实现这一功能。文中介绍了在Oracle OpenWorld大会上学习到的一种方法,该方法允许在不修改现有代码的情况下,为查询优化利用索引。
最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



