测试开发mysql性能调优总结(一)
测试开发mysql性能调优总结
mysql在创建表的时候,对每个字段选择合适的数据类型很重要!
根据个人的经验总结:
整数类型选择 INT
小数类型选择 DECIMAL
字符串类型选择 TEXT
日期时间选择 DATETIME
一般在表中我们都是以字符串类型居多,但是如果字符串类型的字段作为主键的时候,就不能用TEXT了,最好选用CHAR或VARCHAR
主要原因是:
CHAR表示固定长度的字符串
VARCHAR表示的是可变长度的字符串
TEXT表示的是长度不可控,系统会根据实际长度存储这个TEXT字段,不适合建索引
各种主键的缺点:
业务字段做主键,缺点:业务字段的值可能重复
自增字段做主键,缺点:分布式的时候字段值可能重复
UUID或雪花算法做主键,缺点:长度太长
手动赋值字段做主键,缺点:操作比较麻烦
mysql的数据文件:
frm:存放表结构
myd:存放表数据
myi:存放表索引
一条mysql语句执行的过程:
客户端------->连接器-------> 缓存-------> 分析器-------> 优化器-------> 执行器------->存储器
总结:客,连,缓,分析,优化,执行,器
mysql语句的正常顺序:
select ....... from ....... where ....... group by ....... having ....... order by
group by一定要和索引的字段顺序都一致,否则会出现using temporary 创建临时表大大影响数据库性能!!!
explain的type结果值:
system > const > eq_ref > ref > range > index > ALL
最好要达到ref级别,最差也要达到index,一般是range
const:通过索引一次就找到了
eq_ref:主键或唯一索引扫描,只有一条记录匹配
ref:非唯一索引扫描,可能有多条记录匹配
range:范围扫描
index:全索引扫描
all:全表扫描
mysql索引失效的情况 七字口诀:“模型数空运最快”
模:使用like进行模糊查询的时候,以百分号%开头的,索引就会失效。
型:代表数据类型,数据类型错误了,索引也会失效。
数:函数,对索引的字段使用内部函数的,索引也会失效。这种情况,应该建立基于函数的索引。
空:null,索引不存储空值,如果没有声明nou null,数据库会认为有可能存在空值,也不会按照索引进行计算。
运:运算,对索引列进行加减乘除等运算的,会造成索引失效。
最:复合索引中索引列的顺序非常重要,如果不是按照索引列最左列开始查找,则无法使用索引。
快:全表扫描最快,如果数据库认为全表扫描更快的时候,它就不会使用索引。
不适合建索引的情况:
1,表里面的数据量太少
2,经常对表进行增删改
3,数据大量重复


聚簇索引和非聚簇索引的区别:
聚簇索引:数据和对应的索引列存储在一起,索引树的叶子节点存储的是需要查询的数据,innodb既支持聚簇索引也支持非聚簇索引。
非聚簇索引:数据和对应的索引列分开存储,索引树的叶子节点存储的是主键的值,再通过主键值查找到要查询的数据(回表),myisam只支持非聚簇索引。
覆盖索引:查询的数据只需要在索引中就能够获取到,不需要再从数据标中获取,也就是:where里面的索引列包含了select里面的列
order by一定不能和select * 一起使用,因为:
如果要查询的只有2个字段,但是select * 却需要查询所有字段(10个字段),很有可能select * 远远超出了sort_buffer的容量大小,就会导致创建tmp文件进行合并排序,就会导致多次IO。

set global slow_query_log = 1 只是对当前数据库生效
永久生效需要修改my.cnf文件里面的内容:
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/chenjz-slow.log
set global long_query_time = 2 设置慢查询为2秒
show variables like 'long_query_time%' 显示慢查询时长
show variables like '%slow_queries%' 查询慢查询语句的个数
tail -10 /var/lib/mysql/chenjz-slow.log 查看具体的慢查询日志
可以用mysqldumpslow查询slow.log里面的日志
show profiling查看每一步耗时
show variables like 'profiling' 查看profiling的配置是否开启
set profiling = on
show profiles; 显示每一条sql的耗时和query_ID
show profile cpu, block io for query 2; 查看第2个sql的每一步耗时
如果有creating/copy/removing tmp table都是比较耗时的
show processlist 查询当前mysql有些线程正在运行,重点查看Command 这一列:
查看mysql正在运行的线程,按照时间长短排列
select * from information_schema.processlist where Command != 'Sleep' order by Time desc;
查看mysql运行超过500毫秒的线程,按照时间长短排列
select * from information_schema.processlist where Command != 'Sleep' and Time > 500 order by Time desc;
show status like 'table%'; 查找表锁
show status like 'innodb_row_lock%'; 查找行锁
测试开发mysql性能调优总结(一)的更多相关文章
- MySQL性能调优的10个方法 - mysql数据库栏目
摘要: https://edu.aliyun.com/a/29036?spm=5176.11182482.related_article.1.hbeZbF 摘要: MYSQL 应该是最流行了 WEB ...
- MySql(十一):MySQL性能调优——常用存储引擎优化
一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...
- MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
- MySQL性能调优与架构设计——第 15 章 可扩展性设计之Cache与Search的利用
第 15 章 可扩展性设计之Cache与Search的利用 前言: 前面章节部分所分析的可扩展架构方案,基本上都是围绕在数据库自身来进行的,这样是否会使我们在寻求扩展性之路的思维受到“禁锢”,无法更为 ...
- MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication
第13章 可扩展性设计之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instan ...
- MySQL性能调优与架构设计——第11章 常用存储引擎优化
第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...
- MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化
第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...
- MySQL性能调优与架构设计——第1章 MySQL 基本介绍
第1章 MySQL 基本介绍 前言:作为最为流行的开源数据库软件之一, MySQL 数据库软件已经是广为人知了. 但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介绍.主 ...
- MySQL性能调优与架构设计——第6章 MySQL Server 性能的相关因素
第6章 MySQL Server 性能的相关因素 前言 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的大部 ...
随机推荐
- java学习第一天.day03
运行程序数据存储 ASCII Unicode(万国码) A在码表的顺序是65,a在码表的顺序是97,1代表49 变量 定义一个变量声明数据类型是开辟一个空间存储数据,java对数据的定义比较严格,比如 ...
- ES6 Promise详解
前言 本文主要是对Promise本身的用法做一个全面解析而非它的原理实现,如果你对Promise的用法还不是很熟悉或者想加深你对Promise的理解,我相信这篇文章一定会帮到你. 首先让我们先了解一下 ...
- 论文解读(NWR)《Graph Auto-Encoder via Neighborhood Wasserstein Reconstruction》
论文信息 论文标题:Graph Auto-Encoder via Neighborhood Wasserstein Reconstruction论文作者:Shaked Brody, Uri Alon, ...
- awk5个使用场景
awk简介 首先要知道awk的使用场景,需了解awk有哪些优势与短板. 关于个人近期学习awk总结其优势: awk对文本的处理运算效率同比其他工具效率高很多(比shell的for循环高10倍以上,运算 ...
- 第八十四篇:Vue购物车(五) 商品数量的增减
好家伙, 1.商品数量的增减 我们把商品的数量增减独立出来,写成一个独立的组件Counter <template> <div class="number-container ...
- 如何充分利用KingbaseES日志
作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...
- KingbaseES 开启事务提交跟踪
KingbaseESV8R6有个参数 track_commit_timestamp,用来开启跟踪事务提交的时间戳. 配置 编辑kingbase.conf,添加配置如下: track_commit_ti ...
- 【pytest官方文档】解读- 如何安装和使用插件
本节讨论安装和使用第三方插件.关于编写自己的插件,我们下一章继续. 一.pip 安装 就像安装一些其他第三方库一样,使用pip也可以很容易地安装第三方插件,pytest-NAME这是你要安装的插件名称 ...
- Java的lamda表达式/函数式接口/流式计算
在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算.在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率 ...
- [GWCTF 2019]我有一个数据库 WP
打开环境访问看到 提示我有一个数据库,但里面什么都没有,于是拿dirsearch跑了一下,没有出结果 但是有数据库嘛,那么试试常见的几个加上phpmyadmin 试试 于是看到了版本是4.8.1 拿到 ...