关系查询处理和查询优化
1. 查询优化
超过500条创建索引,在索引字段上查询
使用连接代替子查询
尽用IN代替0R, OR的效率是n级别,IN 的效率是log(n)级别,IN 的个数建议控制在200以内
能用BETWEEN不用IN,B+树的特性这种取范围值是比较快的
尽用LIMIT,同时尽量不用count *,inndo是不维护数量的会扫描表数量
切分一个连接时间很长的查询,或返回数据量很大的查询
分解关联查询,在应用层做关联,可以更容易对数据库进行拆分,减少锁的竞争,减少冗余记录的查询
2. 大数据量优化
1.建表优化
此处考察如何建立索引
字段类型尽量精确,尽量小,能用int不要用bigint
尽量不要用null,声明not null,如果是null用0代替
尽量使用TIMESTAMP而非DATETIME
用整型来存ip
注意反范式和范式的优化
2.查询优化
索引命中问题和索引失效问题
3.加缓存
mysql一两千级并发
redis五六万级并发
4.横向纵向拆分
横向拆分 : 分表避免单表数据量过大,mysql千万级就明显性能降低了
纵向拆分 : 单行数据量过大会导致无用字段我网络开销,因为mysql是page为单位读取,如果单行数据量过大会导致page存储数量降低,导致需要读取的page变多缓存变大
5.分表分库
6.使用服务业务场景的数据库
ES或者MoungoDb右或者HBase、
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这块忘得差不多了,以后还会再整理