先来看查询的sql 语句:
select id, t1,t2 from t_table where id in(232922924);
以上查询语句造成数据库的运行线程高,导致页面响应比较缓慢。那么需要从哪些方面来优化查询sql呢?
一般优化sql 会从以下几个方面去考虑:
1.使用组合索引;
(1)如果是单个索引的话,不但要扫描索引,还有回表取其他字段数据的操作,组合索引的话,就可以全部从索引里取数,不需要回表 ;
(2)索引并不是越多越好,这个得根据实际情况来衡量,索引固然可以提高select的查询效率,但是对insert,update的效率会降低;
(3)一边一个表的索引不能超过5个,若太多应考虑将不常用的字段的索引去掉;
2.加大buffer_pool内存,提高硬盘IO能力;
3.避免全表扫描;
查询语句一定要查询条件避免全表扫描)
4.拆成小SQL,程序去拼接数据;
查询数据简单,用程序来分担查询数据的压力,达到减少高并发发生;
5.如果时myisam引擎的话,换成innodb引擎;
myisam引擎的值缓存索引,不会缓存表数据,没有innodb引擎效果好;
程序架构方面优化:
1.增加缓存减少直接查询数据库:
1.比如增加redis缓存;
2.增加中间层
2. sql查询分流:
1.搞多个从库,select语句平均分流多个库中去查询;
3.数据库采用集群。
4.静态资源增加cdn缓存。