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性能优化随笔的更多相关文章

  1. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  2. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  3. [MySQL性能优化系列]提高缓存命中率

    1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...

  4. [MySQL性能优化系列]巧用索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

  5. MySQL性能优化:索引

    MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...

  6. mysql 性能优化方向

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. MySQL性能优化总结

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  8. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  9. [MySQL性能优化系列]LIMIT语句优化

    1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...

随机推荐

  1. Chatbot:

    讲清了一些最最基本的概念 - Intents(意图)和Entities(关键字) - 基于意图(Intent-based)的对话 和 基于流程(Flow-based)的对话  聊天机器人教学:使用Di ...

  2. Jupyter Notebook使用

    不论你是刚开始学 Python,还是正在啃数据分析的骨头,对你来说,不断在各种命令行窗口和编辑器里切来切去,或者不断打开各种窗口查看 matplotlib 的输出之类的繁琐操作,一定是家常便饭了.哎呀 ...

  3. 【大数据】SparkSql 连接查询中的谓词下推处理 (二)

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/II48YxGfoursKVvdAXYbVg作者:李勇 目录:1.左表 join 后条件下推2.左表j ...

  4. Java对象依次取出属性,并去掉特殊字符

    工作里从数据库往前台调数据的时候,庞大的数据量里难免有些字段里包含空格或者一些特殊字符,在前台显示出来会非常不美观,所以在此记录一个去对象内所有属性特殊字符的方法: //获得该对象属性的集合 Fiel ...

  5. vue的双向绑定原理浅析与简单实现

    很久之前看过vue的一些原理,对其中的双向绑定原理也有一定程度上的了解,只是最近才在项目上使用vue,这才决定好好了解下vue的实现原理,因此这里对vue的双向绑定原理进行浅析,并做一个简单的实现. ...

  6. Rust从入门到放弃(1)—— hello,world

    安装及环境配置 特点:安全,性能,并发 rust源配置 RLS安装 cargo rust管理工具,该工具可以愉快方便的管理rust工程 #!/bin/bash mkdir learn cd learn ...

  7. 拒绝CPU挖矿矿工有责

    长期以来CPU挖矿给挖矿行业带来持久的负面影响,因为CPU是电脑的核心设备,一挖矿就干不了别的了,大家是否可以达成共识拒绝CPU挖矿? 显卡挖矿刚好构建在不影响大众的日常工作生活对电脑的需求之上,家用 ...

  8. Winform中设置ZedGraph鼠标焦点位置画出十字线并在鼠标移出时十字线消失

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  9. js函数定义及一些说明

    1.javascript定义函数的三种方法一.function语句//这个方法比较常用function fn(){ alert("这是使用function语句进行函数定义");}f ...

  10. ADFS登录界面自定义

    最近在做identityServer3+ADFS 实现域账号第三方授权验证,发现一个问题,在我们网站跳转到域账户登录页面,这个页面有点不美观,那么我们改如何自定义这个登录界面呢? ADFS安装配置这里 ...