一:MYSQL5.8之后索引失效的常见原因以及如何避免
之前在小公司,数据量不大,用索引也不规范,明明建立了索引,但是通过 Explain 发现语句并没有使用上索引,这可能是某些原因导致了我们的索引失效。所以想自己记录一下,以后忘记了能查看。
MYSQL5.8之后索引失效的常见原因以及如何避免
一:MYSQL5.8之后索引失效的常见原因以及如何避免一:初始化数据库1:创建表2:创建函数
二:索引失效的原因1. 以下情况可能会导致索引失效,应避免使用;2. 对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,\*,/,! 等)3. 对索引列使用函数会导致索引失效,我所指的对索引列进行函数包括(month,ifnull,left 等)4. 不要将空的变量值直接与比较运算符(符号)比较。5. 不要在 SQL 代码中使用双引号。
三:索引使用原则:四:建索引注意事项五:索引容易失效的几个注意点:
一:初始化数据库
1:创建表
-- 创建表
CREATE TABLE `user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '用户名',
`age` int DEFAULT NULL COMMENT '年龄',
`pass` varchar(64) DEFAULT NULL COMMENT '密码',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`user_id`),
KEY `name_pass` (`name`,`pass`) USING BTREE,
KEY `age` (`age`) USING BTREE
) ;
2:创建函数
-- 创建函数 快速添加插入用户信息
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_user`(
IN record INTEGER, -- record参数用来传需要插入数据的条数
IN dt TIMESTAMP -- dt参数用来传入时间戳,开始插入的第一条数据的时间(格式为:'2020-10-24 14:31:44')
)
BEGIN
DECLARE
number INTEGER;-- 声明一个number,用来控制循环的次数
SET number = 1;-- 将number的值赋值为1,代表循环从1开始
START TRANSACTION;
WHILE
number |