Mysql数据库开发设计原则

结合日常开发生产,总结Mysql数据库开发设计原则如下:

  1. 尽量不在数据库做运算

在mysql中尽量不要使用如:md5()、Order by Rand()等这类运算函数

  1. 尽量控制单表数据量

单表数据量过大后会影响数据查询效率

2.1单表数据量预估:

 ①. 纯INT不超过1000W
 ②. CHAR不超过500W

2.2同时要尽量做好合理的分表:

通过USERID来分表(根据ID区间分表)
按DATE分表(按天、周、月分表)
按AREA分表(省、市、区分表)

2.3分区表的适用场景主要有:

① 表非常大,无法全部存在内存,或者只在表的最后有热点数据,其他都是历史数据;
② 分区表的数据更易维护,可以对独立的分区进行独立的操作;
③ 分区表的数据可以分布在不同的机器上,从而高效使用资源;
④ 可以使用分区表来避免某些特殊的瓶颈;
⑤ 可以备份和恢复独立的分区。
  1. 避免使用NULL字段

在数据库表字段设计的时候尽量都加上NOT NULL DEFAULT ‘’

3.1 很难进行查询优化
3.2 NULL列加索引,需要额外空间
3.3 含NULL复合索引无效

  1. 不在数据库里存图片

如果将图片全部存在数据库,将使得数据库体积变大,会造成读写速度变慢。

图片存数据库的弊端:

对数据库的读/写的速度永远都赶不上文件系统处理的速度
数据库备份变的巨大,越来越耗时间
对文件的访问需要穿越你的应用层和数据库层

  1. 谨慎合理添加索引

添加索引是为了改善查询
添加索引会减慢更新
索引不是越多越好
能不加的索引尽量不加(综合评估数据密度和数据分布,最好不超过字段数20%)
结合核心SQL有限考虑覆盖索引

  1. 不在索引列做运算

索引列做运算会导致:

6.1无法使用索引
6.2全表扫描
1
2

  1. 尽量不用外键

7.1 外键可节省开发量
7.2 有额外开销
7.3 高并发时容易死锁
1
2
3

  1. 尽量不用SELECT*

用SELECT 时,将会更多的消耗CPU、内存、IO以及网络带宽,我们在写查询语句时,应当尽量不用SELECT ,只取需要的数据列

  1. 避免负向查询和%前缀模糊查询

在实际开发中,我们要尽量避免负向查询,那什么是负向查询呢,主要有以下:

NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等
1
同时,我们还要避免%前缀模糊查询,因为这样会使用B+ Tree,同时会造成使用不了索引,并且会导致全表扫描,性能和效率可想而知

  1. 减少COUNT(*)

在开发中我们经常会使用COUNT(),殊不知这种用法会造成大量的资源浪费,因为COUNT()资源开销大,所以我们能不用尽量少用

  1. GROUP BY 去除排序

使用GROUP BY可以实现分组和自动排序
无需排序:Order by NULL
特定排序:Group by DESC/ASC

  1. 统一字符集为UTF8,统一命名规范

猜你喜欢

转载自blog.51cto.com/14538264/2438892