Mysql 基础

创作人 Leo


编辑时间 Tue Aug 17,2021 at 19:45


数据表

使用合适的数据类型,尽量不要让字段过大
对于不需要符号的整数加 unsigned 修饰
如果是固定长度字符串比如11位手机号,定长的char(11)比不定长的 varchar 搜索排序效率更高
索引不是越多越好,因为数据插入更新需要更新相关的所有索引;
数据离散度越高,建索引效果越好;
类似 status type 这种离散度低的字段没有必要建索引,因为根据 b+ tree 的特性大量的数据都会被放到一个叶子节点里,建索引不但对查询没有优化效果,反而会降低插入更新效率;
not null default xxx 设置默认值比允许控制效率高,尽量不要允许 null ;

大数据集操作

由于 innodb 引擎有全局锁,需要大量删除数据的情况下,如果一次性按照条件删除,会造成mysql锁时间过长,从而造成业务无法查询数据库造成程序崩溃
比较好的解决方案是按照索引查询一个区间,最好是有一个最大的主键id作为标志,如果没有,带索引的时间区间也是可以的
然后通过条件进行删除,而且循环每次删除一批,比如 1k 或者 10k 数据,具体删除多少不会影响性能,需要看具体数据库配置,可以通过测试程序加上时间测试下再上线


阅读:754
搜索
  • Linux 高性能网络编程库 Libevent 简介和示例 2678
  • web rtc 学习笔记(一) 2591
  • react 学习笔记(一) 2490
  • Mac系统编译PHP7【20190929更新】 2388
  • zksync 和 layer2 2367
  • Hadoop Map Reduce 案例:好友推荐 2287
  • Hadoop 高可用集群搭建 (Hadoop HA) 2275
  • 小白鼠问题 2211
  • Linux 常用命令 2176
  • 安徽黄山游 2152
简介
不定期分享软件开发经验,生活经验