sql优化有很多方面啊,选择几个简单好记的。
1.表的设计方面
从表的设计方面,主要是字段要选择合适的数据类型,比如 整型字段要判断它合适的大小,tinyint,int,bigint 要根据实际情况去选择。还有字符类型选择char,varchar还是text类型更合适。
2.sql语句方面
尽量不用select * ,因为这样可能会产生回表查询,索引查询尽量选择覆盖索引查询避免回表查询,所以要根据实际情况去设计联合索引。
当要进行联表查询的时候,尽量使用 inner join而不使用左连接和右连接,内连接因为查询的顺序不固定,内部会自动选择以小表为驱动,减少每次循环时的数据库连接。
聚合查询的时候 尽量使用unoin all 而不用union ,union会多进行一次匹配过滤,效率较低。
3.主从复制 读写分离
在实际的开发过程中,我们团队为了避免写入数据对数据库查询性能产生影响,我们采用了读写分离的方式,通过复制一个从节点,来同步数据。避免写操作对数据库的影响。
4.sql慢查询
在实际的开发过程,我们团队用到的是若依框架的监控慢sql的方式,去分析慢sql的原因,可能的原因有索引失效,这时候可以通过修改sql语句避免索引失效;如果分析发现因为没有索引而导致的慢sql,我们可以去添加合适的索引来提高查询效率。
5.分库分表
我们团队中有对数据库进行分库分表的优化,做的是垂直分库,因为我们项目是采用的是微服务的框架,每个微服务独立一个模块,每个独立的模块也就对应每一个数据库,把原来单一的数据库也拆分成多个模块,有助于提高磁盘的IO效率;
我们还做了一点就是水平分库,将一个数据库拆分为多个,解决海量数据问题,提高并发效率。
分库分表我们采用的中间件是mychat,能够简单便捷进行分库分表。