一文总结高并发大数据量下MySQL开发规范【军规】

在互联网公司中,MySQL是使用最多的数据库,那么在并发量大、数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的开发规范,希望能给大家带来一些帮助。

一、基础规范

二、库表设计

问题:使用VARCHAR(5) 和VARCHAR(200) 存储’hello’的磁盘空间开销是一样的,使用更短的列有什么优势吗?

更大的定义列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值,尤其是使用内存临时表进行排序或操作时会特别糟糕

三、索引设计

基本规则:索引不是越多越好,能不添加的索引尽量不要添加,过多的索引会严重降低数据插入和更新的效率,并带来更多的读写冲突和死锁!

示例:假设在表tab中id建立了索引

  • Select col_A,col_B from tab where id + 1 > 10001 不会使用索引
  • Select col_A,col_B from tab where id > 10001 – 1 会使用索引

四、SQL优化

  • 线上尽量少使用大SQL,可能一条大SQL就把整个数据库堵死,将复杂SQL拆分为多条简单SQL,化繁为简

  • 一条SQL只能在一个CPU上运算,如果SQL比较复杂执行效率会非常低【8.0之后开始支持单SQL多CPU核执行,但是效果有限】

  • 简单SQL缓存命中率更高
  • 减少锁表时间
  • 充分利用多核CPU,提高并发效率

  • 减少MySQL端的数学运算和逻辑判断,避免SQL语句出现md5()、order by rand()等

  • 尽量少用SELECT * ,只取需要的数据列, 避免无谓的IO、CPU和网络开销
  • WHERE条件中,同一字段改写OR为IN(),IN包含的值不应过多,默认不超过200个,IN里禁止使用子查询
  • 过滤表记录合并且不去重的情况,改写UNION为UNION ALL
  • 减少使用拼接SQL,使用预编译语句,降低SQL注入概率
  • WHERE条件中的非等值条件(IN、BETWEEN、
  • WHERE条件比较,字段类型和传入值必须保证类型一致,避免隐式转换

示例:

字段: code varchar(50) NOT NULL COMENT ‘编码’ #code上建立了索引

SELECT id,name,addr from tab_name where code=10001; 不会使用索引

SELECT id,name,addr from tab_name where code=’10001′; 会使用索引

  • Limit分页优化

  • 传统分页:

Select * from table limit 10000,10;

LIMIT原理:

Limit 10000,10 偏移量越大则越慢

  • 推荐分页:

  • 分页方式一:

Select * from table WHERE id>=23423 limit 11; #10+1 (每页10条)

Select * from table WHERE id>=23434 limit 11;

  • 分页方式二:

Select * from table WHERE id >= ( select id from table limit 10000,1 ) limit 10;

  • 分页方式三:

Select * from table INNER JOIN (SELECT id from table limit 10000,10) USING(id)

  • 分页方式四:

  • 程序取ID: Select id from table limit 10000,10;

  • Select * from table WHERE ID in(123,456…);

最后说明:

上述规范是多年MySQL数据库使用的经验总结,希望能给大家带来一些启发和帮助!

如果你还想看更多优质原创文章,欢迎关注我的公众号「数据库架构师」,提升数据库技能。

Original: https://www.cnblogs.com/databasepub/p/16478997.html
Author: 数据库架构师
Title: 一文总结高并发大数据量下MySQL开发规范【军规】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715285/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 端智能在大众点评搜索重排序的应用实践

    端智能在大众点评搜索重排序的应用实践 – 美团技术团队 https://tech.meituan.com/2022/06/16/edge-search-rerank.h…

    技术杂谈 2023年5月31日
    095
  • System.IdentityModel.Tokens.Jwt库简单试用

    最近准备把一些外部认证接口认证改成jwt的,在 jwt.io的网站上找了下,.net的库中排名第一的是微软自家的库System.IdentityModel.Tokens.Jwt,然…

    技术杂谈 2023年5月31日
    0120
  • hosts文件作用

    1、加快域名解析对于要经常访问的网站,我们可以通过在Hosts中配置域名和IP的映射关系,提高域名解析速度。由于有了映射关系,当我们输入域名计算机就能很快解析出IP,而不用请求网络…

    技术杂谈 2023年7月11日
    093
  • npm常用命令

    npm install npm install=npm i。在git clone项目的时候,项目文件中并没有 node_modules文件夹,项目的依赖文件可能很大。直接执行,np…

    技术杂谈 2023年7月11日
    0100
  • 杂七杂八

    &#xA0;<span class="hljs-keyword">var head = <span class="hljs-…

    技术杂谈 2023年5月31日
    0117
  • quartz框架(十)-QuartzSchedulerThread

    本篇博文,博主将介绍QuartzSchedulerThread的相关内容。话不多说,直接进入正题。 从源码和该类的名称上,QuartzSchedulerThread首先是一个线程类…

    技术杂谈 2023年7月24日
    0104
  • 面试题目:手写一个LRU算法实现

    LFU Least Frequently Used 算法根据数据的历史访问频率来淘汰数据,其核⼼思想是”如果数据过去被访问多次,那么将来被访问的频率也更⾼”…

    技术杂谈 2023年7月11日
    0111
  • 让你的Nginx支持分布式追踪opentracing

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    0117
  • typora 标题自动加编号

    网上看了挺多其他复制粘贴的方法,但是缺点都是第一级 h1 ,都算进去了 按照规范的 markdown 规范,一个 md 文件中只能出现一个 h1,就是标题 所以最大的编号应该就是 …

    技术杂谈 2023年7月11日
    099
  • 使用微软分布式缓存服务Velocity Part 3

    概述 Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的…

    技术杂谈 2023年5月31日
    0170
  • 五分钟搭建博客系统 OK?

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概要: 通过 Docker Compose 在使用 Docker容器构建的隔离环境中轻松运行 WordPress。…

    技术杂谈 2023年7月11日
    093
  • 深入理解独占锁ReentrantLock类锁

    ReentrantLock介绍 【1】ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种…

    技术杂谈 2023年7月23日
    088
  • Love2D游戏引擎制作贪吃蛇游戏

    代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windo…

    技术杂谈 2023年5月31日
    0138
  • ArcGIS Pro属性颜色符号化

    /// /// You must call this method on the MCT! /// /// private CIMRenderer CreateUniqueValu…

    技术杂谈 2023年5月30日
    0128
  • 数字转中文

    =IF(A2=0,””,IF(A2 Original: https://www.cnblogs.com/top5/p/3396621.htmlAuthor:…

    技术杂谈 2023年6月1日
    0112
  • DataX基本使用

    DataX基本使用 1.打印输入流在控制台 获取模板 datax.py -r 输入数据源名字 -w 输出数据源名字(可以到官网上找到准确的名字) 如:datax.py -r mys…

    技术杂谈 2023年7月10日
    0111
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球