前言
大家都知道索引可以提高查询速度,但是有些时候会发现,有了索引反而查询变得比之前还慢了,甚至索引没起作用,那到底是因为什么,这篇文章就带着大家了解其中的原因
下面会讲解几种有索引但是查询不走索引导致查询慢的场景。
函数操作
查询数据时,可能很多时候会借助一些函数实现查询。有时可能我们关注的重心在是否能查出结果,往往忽略了查询的效率。现在就一起研究对条件索引字段做函数操作,是否能用到索引?
验证对条件字段做函数操作是否能走索引
首先创建测试表,建表及数据写入语句如下:
use muke; /* 使用muke这个database */
drop table if exists t1; /* 如果表t1存在则删除表t1 */
CREATE TABLE `t1` ( /* 创建表t1 */
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` varchar(20) DEFAULT NULL,
`b` int(20) DEFAULT NULL,
`c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_a` (`a`) USING BTREE,
KEY `idx_b` (`b`) USING BTREE,
KEY `idx_c` (`c`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
drop procedure if exists insert_t1; /* 如果存在存储过程insert_t1,则删除 */
delimiter ;;
create procedure insert_t1() /* 创建存储过程insert_t1 */
begin
declare i int; /* 声明变量i */
set i=