mysql性能优化随笔
mysql性能优化是一个很大的命题,这里只记录一下近期的一些小经验。
曾经以为看了点create table时加index的语法就觉得自己知道怎么做mysql优化了,后来又看了点介绍mysql索引底层实现的文章,就感觉自己已经得到mysql精髓了一样。。
直到最近因为工作需要认真去提升大数据量下的性能的时候,才发现,自己以前简直跟从三到万里学了一二三就嚷嚷“儿得已”的三岁小儿一样的可笑。。
一、这里简单引用些资料介绍一些优化工具
神器1 https://dev.mysql.com/doc/refman/5.6/en/
官方文档手册,不需要解释。
神器2 explain
用这个看看自己的sql,经历哪些步骤,有没有使用到索引,不要想当然觉得建个索引mysql就能智能的到处使用,它有它的规则的,数据量大时有没有用到索引往往性能是天壤之别。参考资料:https://www.cnblogs.com/butterfly100/archive/2018/01/15/8287569.html
神器3 show engine innodb status\G
尤其推荐执行耗时很长的sql时看看最底下那里,mysql实际速度到底多少,它在忙哪类操作还是在发呆。。

另外可以看看buffer pool用的怎么样
神器4 show global status;
具体解释可以看这里 https://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html
神器5 了解mysql buffer pool
参考这里:https://www.cnblogs.com/coderyuhui/p/6861194.html
官方文档:https://dev.mysql.com/doc/refman/5.6/en/innodb-buffer-pool.html
神器6 show full proccesslist;
查看当前正在执行的sql,也可以kill xxxx去杀掉query
二、最近使用的优化
实际操作中如何优化一定是结合业务场景来做的。例如少量写大量读的,可以用mysql一主多从、合理建索引、前面加一层redis等解决。这里只简单记录一点点
1. 合理使用索引
(1)建议使用组合索引,从explain可以看到一次子查询mysql只会选一个index使用,所以每个字段建一个索引最后也只会使用到其中一个而不是挨个去用。
(2)索引的字段不能太长,组合所有字段加起来长度在768字节以内才行,否则mysql自动取字段前xx字节
(3)把自己的sql用explain看看,确认一下mysql是怎么理解和执行的,是不是符合预期
(4)索引太多不见得好,会影响增删改的性能,以及造成数据膨胀,占用更多的磁盘空间。
2. 合理使用分区表
分区表的使用限制很多,多数情况下不推荐使用,但是刚好完全符合它的特性的时候建议果断用。用好了比自己分表要简单省事的多。
使用原则:
(1)所有查询都要指定分区字段,否则mysql就扫全表并且忽略所有索引
(2)合理的分区个数,底层是每个分区一套文件的,太多太少都不合适。当然自己分表也是一样要确定合理的分表个数。
(3)尽量应用在不需要alter table的场景里,alter table时如果分区较多,性能比普通表要慢很多。
3. 大数据量并且查询多的情况,尽量避免大数据量的join,可以加工制作宽表的方式进行优化。宽表上还可以建索引等。
4. 大批量关联update时,如果无法使用到索引,可以考虑是否方便先insert into select 然后delete老数据。当然这个办法更trick,一般场景是不建议使用的。不过trick的办法都是因地制宜想出来的,了解mysql特性并结合业务场景灵活运用就是好的设计。
mysql性能优化随笔的更多相关文章
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- Mysql性能优化三(分表、增量备份、还原)
接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
- [MySQL性能优化系列]巧用索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- mysql 性能优化方向
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- MySQL性能优化总结
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MYSQL性能优化的最佳20+条经验
MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论 131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...
- [MySQL性能优化系列]LIMIT语句优化
1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...
随机推荐
- ADB端口5037被占用 导致adb 停止工作
解决ADB端口占用问题 方式一 5037为adb默认端口,若5037端口被占用,打开cmd,输入以下指令, 1.查看占用端口的进程PID netstat -aon|findstr 5037 2. 通 ...
- zz自动驾驶复杂环境下高精度定位技术
今天为大家分享下,自动驾驶在复杂环境下的高精度定位技术. 定位/导航负责实时提供载体的运动信息,包括载体的:位置.速度.姿态.加速度.角速度等信息. 自动驾驶对定位系统的基本要求: 1. 高精度:达到 ...
- CF991C Candies
CF991C Candies 洛谷评测传送门 题目描述 After passing a test, Vasya got himself a box of nn candies. He decided ...
- ajax技术初识与应用
一.ajax技术初识 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.Ajax不是一种新的编 ...
- go语言的redis客户端
redis3.0之后提供了新的HA的解决方案,即Cluster模式,由多个节点组成的集群模式.集群master之间基于crc16算法,对key进行校验,得到的值对16384取余,就是key的hash ...
- CF-1238 C.Standard Free2play
题目大意: 有一个墙,高度为h,在每一个高度处都有一个踏板,有的踏板是隐藏着的,有的是伸出来的,小人站在h高度处(题目保证h高度处的踏板一定是伸出来的),这个小人每站到一个踏板上,就可以点一个开关,将 ...
- 认识一下transition
transition 以前的CSS属性切换时,由于只有开始和截止两个状态,切换时略显生硬 jquery.animate 传说中的jquery在保证兼容性之后,又为开发者提供了简洁的过渡(动画其中之一效 ...
- 生成git的SSH公钥
1.右键,点击 git bash here 2.安装成功后设置用户和邮箱git config --global user.name "name"git config --glob ...
- Java后台+数据库+Java web前端——记账本
下面是本人实现的网页版(设计思路见上一篇https://www.cnblogs.com/sengzhao666/p/10445984.html) 代码如下: 运行截图: 首页: 创建: 账本删除:(先 ...
- 纯CSS打造BiliBili样式博客主题
前言 一直以来,我都在思考如何减少不必要的JS代码,仅通过CSS来实现博客园主题美化.CSS有很多魔法代码,例如:before,iconfont,order,等等,利用好这些技巧,也能实现很好美化效果 ...