mysql 性能优化常见命令
mysql 性能优化常见命令:
一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查;
1:mysql> show full processlist;
+----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined |
+----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+
| 52 | root | localhost | test | Query | 0 | init | show full processlist | 0 | 0 |
+----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+
1 row in set (0.00 sec)
该命令用于查看当前连接到mysql服务器的链接,以及经行的什么操作DML,DDL;以及状态;
2:确定耗时过多的查询语句:(show status 用于数据库运行时统计信息,show variables用于查询数据库的设置)
mysql> show status like 'slow_queries';//查询慢查询次数;
mysql> show variables like 'long_query_time';//查看慢查询设置的时间 ,默认10s
mysql> set long_query_time = 1;//设置慢查询时间
3:为sql语句生成一跳执行计划;
mysql> explain select * from userinfo\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: userinfo
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5
Extra: NULL
1 row in set (0.00 sec)
mysql> explain select * from userinfo where usersn = 1;
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | userinfo | const | PRIMARY | PRIMARY | 4 | const | 1 | NULL |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)
4:查询建表时语句:
mysql> show create table userinfo\G;
*************************** 1. row ***************************
Table: userinfo
Create Table: CREATE TABLE `userinfo` (
`usersn` int(10) unsigned NOT NULL AUTO_INCREMENT,
`usernick` varchar(10) NOT NULL,
`lastlogintime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`usersn`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
5:查看表的状态:
mysql> show table status like 'userinfo'\G;
*************************** 1. row ***************************
Name: userinfo
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 5
Avg_row_length: 3276
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 6
Create_time: 2015-05-15 15:36:02
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
二
总结一些分析的命令:
1、explain:解释sql的执行计划,后边的sql不执行
2、explain partitions :用于查看存在分区的表的执行计划
3、explain extended:待验证
4、show warnings:
5、show create table:查看表的详细的创建语句,便于用户对表进行优化
6、show indexes :产看表的所有索引,show indexes from table_name,同样也可以从information_schema.statistics表中获得同样的信息。cardinality列很重要,表示数据量。
7、show tables status: 查看数据库表的底层大小以及表结构,同样可以从information_schema.tables表中获得底层表的信息。
8、show [global|session]status:可以查看mysql服务器当前内部状态信息。可以帮助却行mysql服务器的负载的各种指标。默认是session。同information_schema.global_status和information_schema.session_status
9、show [global|session] variables :查看当前mysql系统变量的值,其中一些值能影响到sql语句的执行方式。同information_schema.global_variables和information_schema.session_variables;
10、information_schema:包含的表的数量和mysql的版本有关系。
-------------------------
三、索引
1、数据完整性:通过主键和唯一键来确保数据唯一性
主键(primary key):每个表只能有一个,主键不为null,定义了auto_increment列,那么此列就必须是主键的一部分。
唯一键(unique key):表中可以存在多个唯一键,每个key可以为null,即null!=null
2、索引术语:
索引技术:
索引实现:
索引类型:
3、创建单列索引:这里要注意的是可以在一列上创建多个索引,但是这样会产生性能开销,
alter table table_name add primary key|index index_name (coumn_name);
4、当存在多个索引的时候,如何确定选择使用哪个索引更高效?
根据索引中唯一值和索引中总行数做比较,唯一值越多,使用这个索引时以更少读得到查询结果。
禁用优化器设置:set @@session.optimizer_switch='index_merge_intersection=off';
5、在like查询中(%oo)不会走索引
6、不支持函数索引。另外在索引上使用函数,执行计划也不会走索引。
7、唯一索引:提供数据完整性,保证在列中任何值都出现一次,告知优化器,给定的记录最多只有一条结果返回,避免了额外的索引扫描,是否进行了额外的索引扫描,可以使用下边的语句查看:
flush status;
show session status like 'handler_read_next';
select name from student where name='Randy';
show session status like 'handler_read_next';
8、对于结果的排序:如果不是根据索引字段进行排序,mysql会使用内部文件排序算法对返回额行按照指定顺序进行排序。使用索引字段进行排序的话将免去分类的过程。
9、组合索引:索引的执行顺序是按照组合索引中每个字段的cardinality来确定使用哪个组合索引。有的时候交换一下组合索引列的顺序,执行效率会更好。主要可能组合索引的最左列。
组合索引列不要太宽,ref表示使用了那几个组合索引字段,key_len表示索引字段的长度
10、查询提示:
通过查询提示来修改查询的执行计划。
straight_join: 强制按照from后边的关联顺序去执行链接操作,不管执行计划是否是最优的。
11、索引提示:
索引提示都会被链接中的表来使用,为每张表定义use、ignore、force类表
use [index|key] [for( join|order_by|group_by)] [index_list] --让优化器倾向于使用指定的索引扫描
ignore [index|key] [for( join|order_by|group_by)] [index_list]
force [index|key] [for( join|order_by|group_by)] [index_list] --让优化器倾向于索引扫描而不是全表扫描
12、索引DML操作的影响:影响写操作的性能。重复索引、
13、通过 show index_staistics来查看索引的使用情况,来确定哪些索引没有被使用。没有被使用的索引占用空间,影响写入性能,
14、DDL:在修改表索引的时候会锁表。会影响存储空间的大小。
15、覆盖索引:
mysql 性能优化常见命令的更多相关文章
- MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)
作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...
- SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...
- MySQL 性能优化技巧
原文地址:MySQL 性能优化技巧 博客地址:http://www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这 ...
- MySQL性能优化神器Explain
本文涉及:MySQL性能优化神器Explain的使用 简介 虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句 ...
- Mysql性能优化之---(一)
mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(符合3NF ...
- MySQL性能优化(四):SQL优化
原文:MySQL性能优化(四):SQL优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ ...
- MySQL性能优化的5个维度
面试官如果问你:你会从哪些维度进行MySQL性能优化?你会怎么回答? 所谓的性能优化,一般针对的是MySQL查询的优化.既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进 ...
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
随机推荐
- javascript进制转换
其他进制转十进制 原理 parseInt 或者 Number.parseInt 语法 parseInt(string, radix); string 必需.要被解析的字符串. radix 可选.表示要 ...
- ES6 Generators并发
ES6 Generators系列: ES6 Generators基本概念 深入研究ES6 Generators ES6 Generators的异步应用 ES6 Generators并发 如果你已经读过 ...
- java基础,集合,HashMap,源码解析
最怕,你以为你懂咯,其实你还不懂: 见贤思齐,看看那些我们习以为常的集合,通过相关定义.源码,思考分析,加深对其的理解,提高编码能力,能做一个略懂的程序员: 做几个我们常用的集合类.开篇HashMap ...
- 【fhq Treap】bzoj1500(听说此题多码上几遍就能不惧任何平衡树题)
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 15112 Solved: 4996[Submit][Statu ...
- 【转载】vim复制时的缩进
:set paste vi/vim鼠标中键粘贴文本默认情况是自动缩进的,如果粘贴的是多行的文本,则第二行缩进1个tab,第三行缩进2个tab……依此类推,到最后文本会面目全非,解决办法是粘贴之前设置为 ...
- scrollify - 滚动条方式的全屏滚动
jQuery Scrollify Version Beta v1.0.5 Date:2017-04-25 23:45 源代码 (function($, window, document) { 'use ...
- Linux磁盘分区/格式化/挂载(树莓派3挂载硬盘)
[前言] 本文将要讲解的功能为Linux环境下对磁盘进行操作.包括分区.格式化.挂载外接移动存储设备等. 该文的写作背景为本人的树莓派需要外接一个固态硬盘作为存储设备,因此,便开始了一系列的折腾. [ ...
- 算法8 五大查找之:二叉排序树(BSTree)
上一篇总结了索引查找,这一篇要总结的是二叉排序树,又称为二叉搜索树(BSTree) . 构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除的效率. 什么是二叉排序树呢?二叉排序树 ...
- CSS基础知识(概念、块级元素、行内元素、选择器)
1.CSS概念 全称为Cascading Style Sheets(层叠样式表),支持专有的文件 - 扩展名为".css" 作用:将HTML的结构(HTML标签即html)与样式( ...
- mvc中传入字典的模型项的类型问题
刚项目一直报这个错,找了一会发现忘了给他模型项了,我把这个小问题纪录下来,希望你们别犯这个小错