#数据库的优化
#### 相信大家在面试的时候经常被问到关于数据库的优化问题,相信大家也很困扰,一般都是少用like,子查询之类的回答。今天就简单告诉大家我自己总结的数据库优化相关的知识:
###首先数据库优化主要分为硬优化和软优化:
硬优化主要是指针对数据库本身的优化(表和库)
软优化主要就是针对sql语句之类的优化
####先说说软优化(主要是sql语句优化):
#### 1, 查询条件尽量加索引
a) 这个不是必须加的,但是在很大程度上能够解决一定查询效率的问题。但是需要注意的是不要在索引字段上做计算,用函数等操作。
#### 2, 少部分关键字的使用需要减少
a) 避免在复杂的查询里面有like ‘%参数%’这样的形式,即少用到模糊查询,模糊查询完全可以在页面做成下拉框做选择。
b) NOT IN 这类也是非常浪费性能的,但是有的时候不可避免的会用到,只能建议少用,如果一定要用到可以用exit not exit代替
c) * 这个禁止使用,虽然有的时候开发是很方便,但是效率极低,建议使用字段名来代替
d) 其他的情况,例如id>2 和id>=3,在整数的情况下,这两个查询结果是一样的,但是效率肯定后者就大于前者了。>2需要去查询=2的情况,而>=3就不需要
#### 3, 减少子查询的使用
a) 只有在业务复杂的时候我们会采用子查询,但是在复杂的业务都可以简单化,所以子查询我们完全可以拆分出来,先生成临时表,在做关联查询,这样就相对简单了
#### 4, 其他
a) 减少对数据库的重复操作,能合并就合并。能一条sql语句解决就不要分多条
b) 告诫大家一句,不要删除测试小姐姐的数据,不然就只能一辈子单身了
c) 还有很多没写到的,希望大家自己慢慢总结。Sql语句的优化不是固定的,只要在特定的业务下能提高效率那么就是ok的。以上只是简单的列举了一部分。
####再说说硬优化:
#### 1, 拆表
a) 在很多的情况下,某一张表某些个字段经常性的被查询到,那么我们就有必要来拆分一下表了
正如上面这张图片,在id,name,attr7,attr8,attr9常用的情况下,我们完全可以把这个表拆分成两张表通过id关联起来
#### 2, 分表
a) 单表数据太多,查询的效率极慢的情况下我们可以把表里的数据分成几张表来存储
就如上图,我们每次查询一月份的数据的时候都要在全年度的表里去查询,数据量太大,查询会很慢。所以我们将每个月份的数据单独提出来做成表,这样查询就相对比较快了
#### 3, 读写分离
a) 读写分离,主要针对数据库访问的量很大,导致数据库运行可能宕机的问题。原理是添加几个数据库,形成集群将访问量平均分配到每个数据库上
如上图,我们只需要修改主库数据,通知到每个分库,从库更新之后。每次查询我们都将查询分配到每个从库就ok了。
####4, 数据库的优化还有针对引擎的优化,但是我先回家了,以后再写哈。。。。
SQL优化
最新推荐文章于 2022-12-07 10:48:56 发布