首页 > 数据库 >测试开发mysql性能调优总结(一)

测试开发mysql性能调优总结(一)

时间:2022-10-25 14:46:15浏览次数:44  
标签:show 查询 索引 调优 测试 mysql query select

测试开发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%'; 查找行锁

 

标签:show,查询,索引,调优,测试,mysql,query,select
From: https://www.cnblogs.com/111testing/p/16824196.html

相关文章

  • 移动测试-远程真机篇
    导读:本文将介绍申请远程真机以及在远程真机上执行测试任务的详细操作,包括申请远程真机、安装应用、扫码、定位、性能测试等。移动测试概览移动测试服务(MobileTesting)是......
  • mysql 不包含某个字符
    转载网址:https://blog.csdn.net/mp624183768/article/details/121696040?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~defa......
  • Kube-hunter:一个用于Kubernetes渗透测试的开源工具
    https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/82719327我们最近发布了一款叫做Kube-hunter[1]的免费工具。你只需提供你的Kubernetes集群的IP或者DNS名称,K......
  • Windows安装MySQL8.0.31
    环境Windows10mysql8.0.31配置下载mysql下载地址:https://dev.mysql.com/downloads/mysql/点击“Download”后,直接点击下面的下载初始化解压到指定文件夹,启动cm......
  • 使用Shell脚本安装MySQL
    使用Shell脚本安装MySQL......
  • 软件测试基础面试总结
    1常用响应码?1开头是信息相应100内容可行,应继续请求,如已完成忽略2开头是成功响应200成功202请求接收到,但是没有响应3开头是重定向301转至指定的url......
  • 接口自动化测试面试题
    1json和python中字典的区别?字典是一种数据类型,而json不是,json是一种数据交换格式,但他又类似与字典,都是key/values储存,所以json和字典可以相互转化,json.lodes()、jso......
  • ui自动化测试面试题总结
    1UI自动化框架如何让搭建?首先按照Po模式搭建自动化框架,搭建框架使用的技术是selenium+pytest,将框架分为6层,common层(公共层:basepage[基础操作封装]、hander_config......
  • 如何测试爬虫ip的可用性
    网络爬虫的应用极大的方便了人们,尤其是多线程多任务工作时,能够极大的提高信息采集工作效率。在使用爬虫IP时,经常会遇到代理时效的问题,那么我们该怎么检测代理是否正常?静态......
  • mysqldump: Got error: 2002: "Can't connect to local MySQL server through socket
    netstat-ln|grepmysql查看mysql.sock实际路径:[root@localhostbackup]#netstat-ln|grepmysqlunix2[ACC]STREAMLISTENING62019......