为什么数据库会慢?
- 任何存储系统决定于其查询性能的主要有三种:查找的时间复杂度、数据总量、高负载
- 决定于查找时间复杂度主要有两个因素:查找算法、存储数据结构
- 无论是哪种存储,数据量越多,资源的消耗(CPU、磁盘读写繁忙)、耗时也会越来越高
- 高负载造成原因有高并发请求、复杂查询等,导致CPU、磁盘繁忙等
优化
- 数据库优化方案的核心本质有三种:减少数据量、用空间换性能、选择合适的存储系统。
分库分表
- 分库分表是实在没有办法的办法,应放到最后选择。
- 优先选择 NoSQL 代替,因为 NoSQL 诞生基本上为了扩展性与高性能。
- 究竟分库还是分表?量大则分表,并发高则分库。
- 分库分表拆分的方式主要分两种:垂直拆分、水平拆分。
- 进行拆分后,路由方式一般有三种:区间范围、Hash、分片映射表。
datetime、bigint、timestamp用哪个来表示时间了?
- 如果需要对时间字段进行操作(如通过时间范围查找或者排序等),推荐使用bigint,
- 如果时间字段不需要进行任何操作,推荐使用timestamp,使用4个字节保存比较节省空间,但是只能记录到2038年记录的时间有限。
- 在InnoDB存储引擎下,通过时间范围查找,性能bigint > datetime > timestamp
- 在InnoDB存储引擎下,通过时间分组,性能timestamp > datetime,但是相差不大
- 在InnoDB存储引擎下,通过时间排序,性能bigint > timestamp > datetime
参考地址
几款mysql性能调优工具 MySQLTuner tuning-primer.sh pt-qurey-digest