目录
索引语法
创建索引
查看索引
删除索引
案例演示
SQL性能分析
SQL执行频率
慢查询日志
索引语法
创建索引
CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ;
查看索引
SHOW INDEX FROM table_name ;
删除索引
DROP INDEX index_name ON table_name ;
案例演示
先创建一张表 tb_user,并且查询测试数据,表结构中插入的数据如下:
数据准备好了之后,接下来,我们就来完成如下需求:
- name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。
- phone手机号字段的值,是非空,且唯一的,为该字段创建唯一索引。
- 为profession、age、status创建联合索引。
- 为email建立合适的索引来提升查询效率。
- 查看tb_user表的所有的索引数据。
1.直接创建索引即可。
CREATE INDEX idx_user_name ON tb_user(name);
2.创建唯一索引。(index前面加关键词unique)
CREATE UNIQUE INDEX idx_user)phone ON tb_user(phone);
3.创建联合索引,联合索引中,各字段的顺序是有影响的(现在仅作了解)
CREATE INDEX idx_user_pro_age_sta ON tb_user(profession,age,status);
4. 这里的email字段适合单列索引。
CREATE INDEX idx_email ON tb_user(email);
5.查看tb_user表的所有的索引数据。
show index from tb_user;
SQL性能分析(上)
SQL执行频率
MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信
息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT(增改删查)的访问频次。
-- session 是查看当前会话 ;
-- global 是查询全局数据 ;
SHOW GLOBAL STATUS LIKE 'Com_______';
-- 七个下划线
Com_insert: 插入次数
Com_select: 查询次数
Com_update: 更新次数
通过上述指令,我们可以查看到当前数据库到底是以查询为主,还是以增删改为主,从而为数据库优化提供参考依据。
如果是以增删改为主,我们可以考虑不对其进行索引的优化。
如果是以查询为主,那么就要考虑对数据库的索引进行优化了。
那假如说是以查询为主,我们又该如何定位针对于那些查询语句进行优化呢? 次数我们可以借助于慢查询日志。
慢查询日志
(Linux系统中)
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有
SQL语句的日志。
MySQL的慢查询日志默认没有开启,我们可以查看一下系统变量 slow_query_log。
如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
# 开启MySQL慢日志查询开关
slow_query_log=1
# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2
配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息
/var/lib/mysql/localhost-slow.log。
systemctl restart mysqld;
-- 在Linux系统中重启MySQL
这时,再次查看开关情况,慢查询日志就打开了。
END
学习自:黑马程序员——MySQL数据库课程