从头开始学MySQL-------性能优化

网友投稿 484 2022-11-16

从头开始学MySQL-------性能优化

从头开始学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小时内删除侵权内容。

上一篇:关于BufferedReader读取文件指定字符集问题
下一篇:使用FileReader采用的默认编码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~