Mysql 基础

创作人 Leo


编辑时间 Sun Mar 14,2021 at 14:16


数据表

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

大数据集操作

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


阅读:448
搜索
  • Linux 高性能网络编程库 Libevent 简介和示例 2332
  • Mac系统编译PHP7【20190929更新】 2208
  • zksync 和 layer2 1899
  • Hadoop 高可用集群搭建 (Hadoop HA) 1891
  • Linux 常用命令 1878
  • 安徽黄山游 1855
  • Windows 安装Swoole 1815
  • 小白鼠问题 1785
  • Hadoop 高可用YARN 配置 1785
  • 使用 Java+Thrift 实现异步事件处理服务 1684
简介
不定期分享软件开发经验,生活经验