准备
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
Key `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
insert into user(name,created_at) values("a","2006-01-02 16:04:05");
insert into user(name,created_at) values("b","2006-02-02 16:04:05");
背景
where中条件使用了函数的话是使用不了索引的,如
image.png解决方式
mysql 8.0后有新增了一个functional index
ALTER TABLE user ADD INDEX((month(created_at)));
image.png
如果是5.7的话,可以使用虚拟列mysql虚拟列 - 简书 (jianshu.com)
functional index其实就是一个隐藏的虚拟生成的列
网友评论