ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql调优之使用mysql慢查询日志优化sql语句及表索引

2022-07-27 13:00:53  阅读:202  来源: 互联网

标签:index name column mysql 索引 调优 及表 Mysql table


Mysql调优之使用mysql慢查询日志优化sql语句及表索引

一,用慢查询日志找出耗时语句,并优化

# 查看mysql系统慢查询变量配置(能看到慢查询日志是否开启,日志路径等)

SHOW VARIABLES LIKE '%slow%';

SHOW VARIABLES LIKE '%slow%';

查询结果示例:
Variable_name    Value
log_slow_admin_statements    OFF
log_slow_slave_statements    OFF
slow_launch_time    2
slow_query_log    OFF
slow_query_log_file    E:\\deploy\\mysql-5.7.17-winx64\\data\\WIN-0UEGEHC41P1-slow.log

 

# 开启mysql慢查询日志

SET GLOBAL slow_query_log=ON; # 默认值是 OFF

# 查看慢查询时间(默认值是10.000000,即10s)
SHOW VARIABLES LIKE "long_query_time";

#查看一共执行过几次慢查询:
SHOW GLOBAL STATUS LIKE '%slow%';

# MySQL 提供了一个 EXPALIN 命令,可以用于对 SELECT 语句 的执行计划进行分析,并详细的输出分析结果,供开发人员进行针对性的优化。我们想要查询一条sql有没有用上索引,有没有全表查询,这些都可以通过explain这个命令来查看。通过explain命令,我们可以深入了解到MySQL的基于开销的优化器,还可以获得很多被优化器考虑到的访问策略的细节以及运行sql语句时哪种策略预计会被优化器采用。explain的使用十分简单,通过在查询语句前面加一个explain关键字即可。(例如查看查看SQL是否使用索引)

EXPLAIN SELECT * FROM myTableName WHERE source_sha1='熊仔其人' AND service_type=0;

#查看该表数据量:

SELECT COUNT(*) FROM myTableName;

# 在 MySQL 中,可以使用 SHOW INDEX 语句查看表中已存在的索引。

SHOW INDEX FROM myTableName;

 


二,根据慢查询语句条件字段创建索引,删除无效索引

 

# 针对慢查询,一般做法是针对where条件后面的字段创建索引。

ALTER TABLE myTableName ADD INDEX idx_souce;  # 用add index_name 可以创建 PRIMARY KEY
ALTER TABLE myTableName ADD INDEX idx_source_sha1_service_type (source_sha1, service_type); 

创建索引命令格式:

### add index mysql 语句

# 1.PRIMARY  KEY(主键索引)
mysql>ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY (  `column`  )

# 2.UNIQUE(唯一索引)
mysql>ALTER  TABLE  `table_name`  ADD  UNIQUE (`column` )

# 3.INDEX(普通索引)
mysql>ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column`  )

# 4.FULLTEXT(全文索引)
mysql>ALTER  TABLE  `table_name`  ADD  FULLTEXT ( `column` )

# 5.多列索引
mysql>ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column1`,  `column2`,  `column3`  )

 

创建索引

alter table table_name add index_name using btree('column_name',...,'column_name');

create unique index index_name on table_name('column_name');

两者区别:

(1)add index_name 支持一次多个索引创建alter table table_name add index_name using btree('column_name',...,'column_name'),add index_name using btree('column_name',...,'column_name')

(2)add index_name 可以创建 PRIMARY KEY

(3)create index 创建时必须制定index_name,alter 可以使用默认名

 

删除无效索引:

# 索引删除
alter table table_name drop index index_name;

【完】

 

标签:index,name,column,mysql,索引,调优,及表,Mysql,table
来源: https://www.cnblogs.com/xiongzaiqiren/p/16524477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有