当前位置: 首页 > article >正文

实战 2000w 数据大表的优化过程,提供三种解决方案

实战 2000w 数据大表的优化过程,提供三种解决方案
方案概述
方案一:优化现有mysql数据库。
优点:不影响现有业务,源程序不需要修改代码。成本最低;缺点:有优化瓶颈,数据量过亿就玩完了。

方案二:升级数据库类型,换一种100%兼容mysql的数据库。
优点:不影响现有业务,源程序不需要修改代码。缺点:多花钱

方案三:一步到位,大数据解决方案,更换newsql/nosql数据库。
优点:扩展性强,成本低,没有数据容量瓶颈。缺点:需要修改源程序代码

以上三种方案,按顺序使用即可,数据量在亿级别一下的没必要换nosql,开发成本太高。三种方案我都试了一遍,而且都形成了落地解决方案。

方案一:优化现有mysql数据库

sql的编写需要注意优化

1、数据库设计和表创建时就要考虑性能

设计表时要注意:

表字段避免null值出现,null值很难查询优化且占用额外的索引空间,推荐默认数字0代替null。

尽量使用INT而非BIGINT,如果非负则加上UNSIGNED(这样数值容量会扩大一倍),当然能使用TINYINT、SMALLINT、MEDIUM_INT更好。

使用枚举或整数代替字符串类型

尽量使用TIMESTAMP而非DATETIME

单表不要有太多字段,建议在20以内

用整型来存IP

索引

索引并不是越多越好,要根据查询有针对性的创建,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描

应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描

值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段

字符字段只建前缀索引

字符字段最好不要做主键

不用外键,由程序保证约束

尽量不用UNIQUE,由程序保证约束

使用多列索引时主意顺序和查询条件保持一致,同时删除不必要的单列索引

简言之就是使用合适的数据类型,选择合适的索引

选择合适的数据类型

(1)使用可存下数据的最小的数据类型,整型 < date,tim

http://www.lryc.cn/news/2420529.html

相关文章:

  • 系统架构设计——互联网金融系统架构设计
  • 自主安全国产虚拟化平台CNware
  • 微信 版本android 7.0,安卓微信7.0新版对比旧版详细体验
  • INS/GPS组合导航类型简介
  • Python自学-简单函数
  • EsgynDB 关于带索引的DELETE性能提升
  • SQL:MINUS 用法
  • 什么是字节 什么是数据包
  • 壁纸wallpaper透视壁纸王者荣耀透视壁纸mpkg
  • 暗黑游戏服务器列表为空,暗黑3战网错误代码大全 游戏出错童鞋看过来
  • 汽车雨刮故障维修要点
  • Python爬虫需要学多久?
  • 【医学信息工程导论】了解医学信息工程专业是干嘛的,学什么内容
  • TextBox中只能输入数字的简单方法(C#)
  • 智能家居:将来的生活与家居自动化
  • 图的基本算法(算法导论)
  • 完全免费快速搭建个人www服务器
  • ros_bridge ackermann控制
  • 微信推出“微信圈子”,玩起来原来这么爽?
  • 数据库——概念模型(CDM)、逻辑模型(LDM)、物理模型(PDM)
  • vnc远程控制linux密码,使用VNC实现LINUX与windows的相互远程控制
  • 《WinForm开发系列之控件篇》Item2 BindingNavigator
  • 会声会影x4素材_会声会影2020旗舰版Corel VideoStudio Ultimate 2020中文版
  • hadoop集群搭建(一)(超详细)
  • 网络爬虫:爬取网页数据
  • 一文全面讲清操作系统,附各类操作系统(windows、macOS 、ChromeOS等应知应会)
  • xcode 升级到4.5 version file compare功能无法使用的问题
  • 三级网络技术应付式速成考试笔记(汇总)
  • 很高兴大家下载rapid-framework
  • Ubuntu 安装Sougou Pinyin输入法