概述
sql方面的优化最简单最直观的就是:
1.在频繁出现的查询条件处加索引;
2.使用explain看下执行计划
准备测试表:
CREATE TABLE `t_user_test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(16) NOT NULL,
`age` TINYINT(4) NOT NULL,
`city` VARCHAR(16) NOT NULL,
`create_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
准备测试数据:
desc t_user_test;
insert into t_user_test values(null,'star',25,'bj',null);
#数据不够先多执行几次
insert into t_user_test(name,age,city) select name,age,city from t_user_test;
update t_user_test set name = concat(name,id);
update t_user_test set age = age + floor(rand() * 50);
普通查询:
select * from t_user_test where name = 'star9130';
#type:all 全表扫描
explain select * from t_user_test where name = 'star9130';
创建普通索引:
create index idx_nac on t_user_test(name,age,city);
select * from t_user_test where name = 'star9130';
#type:ref 简单理解普通索引
explain select * from t_user_test where name = 'star9130';
索引最左匹配:
select * from t_user_test where name = 'star9130' and age = 72;
#type:ref
explain select * from t_user_test where name = 'star9130' and age = 72;
#无索引列最左字段,无法进入索引
explain select * from t_user_test where age = 72; #type:all
explain select * from t_user_test where city = 'bj'; #type:all
explain select * from t_user_test where age=72 and city = 'bj'; #type:all
#包含索引列最左字段,可以进入索引,条件顺序不影响,mysql优化执行
explain select * from t_user_test where name = 'star9130' and city = 'bj'; #type:ref
explain select * from t_user_test where city = 'bj' and name = 'star9130'; #type:ref
explain select * from t_user_test where age = 72 and name = 'star9130'; #type:ref
索引失效:
select * from t_user_test where substr(name,1,4) = 'star';
#type:all 避免函数作用于条件等号左边
explain select * from t_user_test where substr(name,1,4) = 'star';
#type:all 避免使用模糊查询
explain select * from t_user_test where name like 'star%';
#type:range 尽量使用索引覆盖
explain select name,age,city from t_user_test where name like 'star%';
#type:all 字符类型加引号,避免隐式转换
explain select * from t_user_test where name = 2222
其他:
使用union取代or,合理使用in和exists,日期字段查询等号右侧使用常量,使用>=和<=取代<>等等,可以结合表数据量自行测试。
最后
以上就是隐形中心为你收集整理的MySQL中针对SQL语句优化的全部内容,希望文章能够帮你解决MySQL中针对SQL语句优化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复