MySQL优化一般会从以下几方面进行入手:引擎(MySAM、InnoDB等引擎的选择)、表设计(可以反三范式添加冗余字段提高检索效率)、字段的数据类型(数值型字段优于字符串字段)、sql书写、索引等方面进行优化,其中索引优化最为常见
show global status like ‘com_______’(7个_)用来查询删除次数、插入次数、查询次数、更新次数等信息,来看看是否是查询次数较多
global 查询全局数据 session 查看当前会话
添加索引改善的是查询效率,由于B+树的数据结构特点,索引本身要占据一部分空间,树的度数(一个节点的子节点个数)就会减少,树的高度会增高,添加索引会减慢新增、修改的速度,因此需要使用执行频率进行分析是否合适添加索引
creat index idx_user_name on tb_user(name) 为tb_user表中的name字段添加索引名字叫 idx_user_name
create unique index idx_user_phone on tb_user(phone) 为tb_user表中的phone字段添加非空唯一索引索引名叫index idx_user_phone
create index id_user_pro_age_sta on tb_user(profession,age,status) 为tb_user表中添加profession,age和status这3个字段的联合索引索引名称为id_user_pro_age_sta
create index idx_email on tb_user(email) 为tb_user的email字段创建索引名字叫idx_email
show index from tb_user 查看tb_user表中所有的索引数据
索引语法总结
创建索引
create (unique|fulltext) index 索引名字 on 表名(需加索引字段的名字)
查看索引
show index from 表名
删除索引
drop index 索引名称 on 表名
补充:
alter table ‘user’ add primary key(id)为id字段添加主键索引
alter table user add index(username)添加username为普通索引
开启慢查询日志,需要修改mysql中的配置文件/etc/my.cnf
开启MySQL慢日志查询开关
slow_query_log=1
慢查询日志默认时间为10秒,需要进行修改,修改慢查询日志,下面修改为2秒
long_query_time=2
修改配置文件可以使用vim命令进行修改,也可远程连接工具图形化界面进行修改
慢查询日志会将日志信息保存到/var/lib/mysql/localhost-slow.log中
修改完配置需要重新启动mysql服务 systemctl restart mysqld
在selec语句前面加上explain,显示MySQL如何使用SQL执行计划
explain select * from user where id = 1 union select * from user where id =2
显示执行计划的结果
id是select查询序列号,代表查询顺序,数字越大优先级越高
select_type:select语句类型可分为simple、primary、subquery、dervied、union、union result
其中最重要的两个字段是type 和 extra
type 区间索引,显示连接使用了何种类型,从好到差的连接类型为
system>const>eq_ref(查询条件在主表是唯一)>ref(查询条件在主表不是唯一)>range>index>all
一般来说,应保证查询效率在range级别(检索范围行)以上,最好能够达到ref级别
如果是all全表扫描数据文件和index全表扫描索引文件,就说明索引设置有问题需要优化
extra 执行状态如果是using index 表示数据仅仅使用到了索引信息而没有回表查询
如果出现using filesort、using temporary 表示使用到了外部文件和使用到了临时表,这时需要对索引进行优化