MySQL优化及索引

MySQL优化一般会从以下几方面进行入手:引擎(MySAM、InnoDB等引擎的选择)、表设计(可以反三范式添加冗余字段提高检索效率)、字段的数据类型(数值型字段优于字符串字段)、sql书写、索引等方面进行优化,其中索引优化最为常见

1.MySQL索引优化前,要对sql的执行频率进行分析

show global status like ‘com_______’(7个_)用来查询删除次数、插入次数、查询次数、更新次数等信息,来看看是否是查询次数较多

global 查询全局数据   session 查看当前会话

添加索引改善的是查询效率,由于B+树的数据结构特点,索引本身要占据一部分空间,树的度数(一个节点的子节点个数)就会减少,树的高度会增高,添加索引会减慢新增、修改的速度,因此需要使用执行频率进行分析是否合适添加索引

2.索引的创建

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为普通索引

3.慢查询日志

开启慢查询日志,需要修改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 表示使用到了外部文件和使用到了临时表,这时需要对索引进行优化

猜你喜欢

转载自blog.csdn.net/sunyunfei1994/article/details/136068176