索引优化
- 索引一般加在查询条件的关键字上,如果有多个查询条件关键字,还可以添加组合索引
- 不要在查询=前面使用函数,否则会导致索引不生效
- 建立索引的字段要区分度比较高
- 建立组合索引,可以持续提升sql运行效率,但是也不要盲目,同样的要注意区分度,如果区分度不够高,就不要加了,多个字段,尽可能把区分度高的字段放在前面,另外,还要注意索引长度,这个索引要同时兼顾索引长度和区分度的平衡
-
分库分表分区
根据业务来判断,如果业务是有流程的,那么我们可以设计 历史表和归档表。这样可以保证实时数据比较高
- 针对大表可以根据时间进行划分
- 分区的实现道理和分表一样,也是将相应规则的数据放在一起,唯一不同的是分区你只需要设定好分区规则,插入的数据会被自动插入到指定的区里。分表能够抗高并发,而分区不能
数据库引擎
mysql比较常用的数据库引擎有两种,一种是innodb、一种是myisam 。之所以mysiam快,是因为他的数据存储结构、索引存储结构和innodb不一样的,mysiam的索引结构是在内存中存的
预处理
- 实时数据:通过对对业务的抽象,可以放在缓存里面,提升系统运行效率
历史数据,大数据表历史数据且有表关联,通过常规sql难以优化,做法是将这些复杂表关联sql写成个定时任务在半夜执行,将执行的结果存入到一张结果表中,第二天直接查询结果表,如此,效率能得到十分明显提升
like 机制
大家都知道,like “%str%” 不支持索引, “str%”号是支持索引的