关系查询处理和查询优化

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、

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这块忘得差不多了,以后还会再整理

posted @ 2022-07-24 22:12  石元  阅读(71)  评论(0编辑  收藏  举报