微前端架构如何改变企业的开发模式与效率提升
518
2022-11-16
从头开始学MySQL-------性能优化
1.使用LIKE关键字可能触发不了索引
首先执行下面的SQL,准备一些数据。
DROP TABLE IF EXISTS t_student;CREATE TABLE `t_student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`), INDEX `nameIdx` (`name`(3)) -- 增加一列索引)
DROP PROCEDURE IF EXISTS insertStu; DELIMITER //CREATE PROCEDURE insertStu(IN myCount INT(11))BEGIN DECLARE id INT(11) DEFAULT 0; WHILE id < myCount DO SET id = id + 1; INSERT INTO t_student VALUES(NULL,CONCAT('大宇',''+id),id+22); END WHILE; -- END //DELIMITER ; CALL insertStu(10);
t_student表的数据
首先看这张表里面的索引。
SHOW INDEX FROM t_student;
除了主键的唯一索引以外,在name这一列上添加了nameIdx索引。
再来看看使用模糊查询,会不会影响索引的使用。
EXPLAIN SELECT * FROM t_student WHERE name LIKE '%大宇1';
从上述红色方框里面可知,没有使用任何索引,并且查询了10条数据,造成了全表扫描。原因是因为,只有"%"不在第一个位置的时候,索引才会被使用。
再来写一个SQL来证明上述的结论。
EXPLAIN SELECT * FROM t_student WHERE name LIKE '大宇1%';
上述分析结果说明这次使用了名为'nameIdx'的索引,并且只扫描了2条记录。索引的威力发挥了出来。
使用LIKE关键字可能不会触发索引,因此,只有"%"不在第一个位置,索引才会发挥左右。
2.使用OR关键字的查询语句
查询语句中的查询条件只有OR关键字,并且OR关键字前后两个条件中的列都是索引的时候,才会使用索引。
SHOW INDEX FROM t_student;
在这张表里面里,共有三个列,分别为id、name、age,id使用的主键索引,name使用的是nameIdx索引,而age列上没有索引。
EXPLAIN SELECT * FROM t_student WHERE id=1 OR name = 'test'
根据上述执行结果,在执行SQL过程中仅仅使用了OR关键字,并且过滤条件是id与name,在红色方框里面显示了使用的索引。本次查询扫描了扫描了2条记录。
再执行下面的SQL,其中id有索引,age没有索引,看看情况会是什么样子。
EXPLAIN SELECT * FROM t_student WHERE id=1 OR age = 22
possible_keys说明了可能用到id的主键索引,但是key字段说明本次扫描实际没有用到任何索引。因此,rows的值为10,说明出现了全表扫描。
结论:查询语句中的查询条件只有OR关键字,并且OR关键字前后两个条件中的列都是索引的时候,才会使用索引。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~