MySQL最佳实践

时间:2022-09-02 07:52:38
一、核心军规

        - 不在数据库做运算:cpu计算务必移至业务层
        - 控制单表数据量:单表记录控制在1000w
        - 控制列数量:字段数控制在20以内
        - 平衡范式与冗余:为提高效率牺牲范式设计,冗余数据
        - 拒绝3B:拒绝大sql,大事物,大批量

二、字段类军规

- 用好数值类型

            tinyint(1Byte)

            smallint(2Byte)

            mediumint(3Byte)

            int(4Byte)

            bigint(8Byte)

            bad case:int(1)/int(11)

- 字符转化为数字

            用int而不是char(15)存储ip

- 避免使用NULL字段

            NULL字段很难查询优化

            NULL字段的索引需要额外空间

            NULL字段的复合索引无效

- 少用text/blob

            varchar的性能会比text高很多

            实在避免不了blob,请拆表

- 不在数据库里存图片

三、索引类军规

- 谨慎合理使用索引

            改善查询、减慢更新

            索引一定不是越多越好(能不加就不加,要加的一定得加)

            覆盖记录条数过多不适合建索引,例如“性别”

- 字符字段必须建前缀索引

- 不在索引做列运算

            bad case:

            select id where age +1 = 10;

- innodb主键推荐使用自增列

            主键建立聚簇索引

            主键不应该被修改

            字符串不应该做主键

            如果不指定主键,innodb会使用唯一且非空值索引代替

- 不用外键

            请由程序保证约束

四、sql类军规

- sql语句尽可能简单

            一条sql只能在一个cpu运算

            大语句拆小语句,减少锁时间

            一条大sql可以堵死整个库

- 简单的事务

            事务时间尽可能短

            bad case:

            上传图片事务

- 避免使用trig/func

            触发器、函数不用

            客户端程序取而代之

大量甚至海量数据的增删改、查询、聚合查询的性能还有待提高。为了规避这些问题,我们在开发规范里面要求MySQL的实例大小低于150G,要求表行数不超过500w,尽量降低查询、修改、删除脚本的复杂度,以原子查询的方式访问数据库。
_搜狗


参考:赶集mysql军规

MySQL最佳实践的更多相关文章

  1. paip.python连接mysql最佳实践o4

    paip.python连接mysql最佳实践o4 python连接mysql 还使用了不少时间...,相比php困难多了..麻烦的.. 而php,就容易的多兰.. python标准库没mysql库,只 ...

  2. MySQL · 最佳实践 · 分区表基本类型

    MySQL · 最佳实践 · 分区表基本类型 MySQL分区表概述 随着MySQL越来越流行,Mysql里面的保存的数据也越来越大.在日常的工作中,我们经常遇到一张表里面保存了上亿甚至过十亿的记录.这 ...

  3. prometheus+grafana监控mysql最佳实践

    导航 前言 环境准备 安装Docker 安装prometheus 安装mysqld_exporter prometheus采集数据 安装grafana grafana配置数据源 感谢您的阅读,预计阅读 ...

  4. MySQL 最佳实践 —— 高效插入数据

    当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到,逐条发送 INSERT 语句并不是一个可行的方法. MySQL 文档中有些值得一读的 INSERT 优化技巧. 在这篇文章里,我将 ...

  5. MySQL · 答疑解惑 · MySQL 锁问题最佳实践

    http://mysql.taobao.org/monthly/2016/03/10/ 前言 最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会 ...

  6. MySQL 性能优化 30个数据库设计的最佳实践

    数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程. ...

  7. 【MySQL】锁问题最佳实践

    最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会造成严重的影响,没有处理经验的用户往往无从下手.下面将从整个数据库设计,开发,运维阶段介绍如何 ...

  8. paip.mysql fulltext 全文搜索.最佳实践.

    paip.mysql fulltext 全文搜索.最佳实践.  作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blo ...

  9. MySQL锁问题最佳实践

    最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会造成严重的影响,没有处理经验的用户往往无从下手.下面将从整个数据库设计,开发,运维阶段介绍如何 ...

随机推荐

  1. git 设置代理服务器

    git可以通过以下命令设置代理服务器 git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:proxypo ...

  2. 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】

    一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...

  3. JS小总结

    今天看了一下js的部分总结了一下 函数的定义首先是命名函数function funcName函数还有匿名函数 var funcName = function()普通函数和匿名函数在调用上基本没有什么区 ...

  4. MySQL执行存储过程权限

    http://url.cn/f2bj78 MySQL grant不能在on后面写多个对象

  5. Mac OS X Yosemite 10.10 配置 Apache+PHP 教程注意事项

    刚更新到了 Mac OS X Yosemite 10.10,发现运行Apache出现了一些问题,修正一下! 教程基于 Mac OS X Mavericks 10.9.X,移步:Mac OS X Mav ...

  6. Java-对象多态性

    class A {  public void fun1()  {   System.out.println("<----A------>");  }  public v ...

  7. 给EditText设置边框

    布局文件中加入background属性: <EditText android:layout_width="200dp" android:layout_height=&quot ...

  8. ●BZOJ 2752 &lbrack;HAOI2012&rsqb;高速公路&lpar;road&rpar;

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2752题解: 期望,线段树. 把每个路段看成一个点,那么对于l~R的操作,就可以转化为对l~r ...

  9. tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解

    本文来源:http://blog.csdn.net/wanghui2008123/article/details/37694307 本文参考http://blog.sina.com.cn/s/blog ...

  10. Nginx与PHP-FPM运行原理详解

    目录 1. 代理与反向代理 1. 正向代理:访问google.com 2. 反向代理:通过反向代理实现负载均衡 2. 初识Nginx与PHP-FPM 1. Nginx是什么 2. CGI与FastCG ...