索引优化

  1. 索引一般加在查询条件的关键字上,如果有多个查询条件关键字,还可以添加组合索引
  2. 不要在查询=前面使用函数,否则会导致索引不生效
  3. 建立索引的字段要区分度比较高
  4. 建立组合索引,可以持续提升sql运行效率,但是也不要盲目,同样的要注意区分度,如果区分度不够高,就不要加了,多个字段,尽可能把区分度高的字段放在前面,另外,还要注意索引长度,这个索引要同时兼顾索引长度和区分度的平衡
  5. 索引会大幅提升查询效率,但是也会损耗查询后修改效率

    分库分表分区

  6. 根据业务来判断,如果业务是有流程的,那么我们可以设计 历史表和归档表。这样可以保证实时数据比较高

  7. 针对大表可以根据时间进行划分
  8. 分区的实现道理和分表一样,也是将相应规则的数据放在一起,唯一不同的是分区你只需要设定好分区规则,插入的数据会被自动插入到指定的区里。分表能够抗高并发,而分区不能

    数据库引擎

    mysql比较常用的数据库引擎有两种,一种是innodb、一种是myisam 。之所以mysiam快,是因为他的数据存储结构、索引存储结构和innodb不一样的,mysiam的索引结构是在内存中存的

预处理

  1. 实时数据:通过对对业务的抽象,可以放在缓存里面,提升系统运行效率
  2. 历史数据,大数据表历史数据且有表关联,通过常规sql难以优化,做法是将这些复杂表关联sql写成个定时任务在半夜执行,将执行的结果存入到一张结果表中,第二天直接查询结果表,如此,效率能得到十分明显提升

    like 机制

  3. 大家都知道,like “%str%” 不支持索引, “str%”号是支持索引的

读写分离

mysql 集群