- 首先是sql优化
(包括设计数据库字段结构、索引等优化;还有就是优化sql语句)
- 结合explain分析语句
- 优化索引
- 减少表连接,可适当增加冗余字段(该字段的更新操作的频率要小)
- 多表连接情况下,把表数据量大的放于最前面,可以减少查询行数
- 避免使用左模糊查询和全模糊查询,用 inStr()、chartIndex()替换,或使用搜索引擎
- 避免对字段进行NULL值判断(这样会放弃索引,走全表扫描),使用 not null + default 的方式设计字段
- 查询的字段写出具体的列明,不要使用 *
- 避免使用in和not in(会导致全表扫描),如果是连续数值,用between代替;如果是子查询,用exists代替
- 读写分离
在大量的读操作在进行的时候,同时可能会有少量的写操作,但是写操作一般是加了写锁的,会阻塞读操作的线程,产生大量的读写锁冲突,数据库的读会成为数据库的性能瓶颈。这时候,就要采用读写分离。
可以一个master数据库用来写数据操作,多个slave数据库用来读数据库操作,构成数据库的主从结构。配置好他们的主从复制,当数据写进master主数据库后,通过某种机制自动将数据同步到各个slave从数据库,这样读数据跟写数据分开不同的数据库,防止写锁的阻塞。
- 分库分表
当数据库中含有大量数据,请求的并发数也很高的时候,就要采用分库分表了。分表主要是为了解决单表数据量过大的问题,而分库主要是为了解决数据库每秒并发数大过大的问题。
粘上一个详细的分库分表介绍: https://blog.csdn.net/weixin_42132143/article/details/107254910