Mysql中sql优化方案

MYSQL优化的方案:

1.避免使用select *查询全部信息,select语句指明需要的字段。
2.用union all 代替union

union:对两个结果集进行并集操作, 不包括重复行,相当于distinct,会对获取的结果进行排序操作。

union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复,不会对获取的结果进行排序操作

union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高

3.小表驱动大表

in 的话里面驱动外面,适合里面是小表
exist 的话外面驱动里面,适合外面是小表

4.批量插入

mybatis plus 的insertBatch 当然一次插入量也不能太大,可以分批插入。

5.多用limit限制查询返回记录数
6.用连接查询代替子查询

MySQL如果需要在两张以上表中查询数据的话,一般有两种实现方式:子查询、连接查询

子查询可以通过in实现,

select * from order where user_id in (select id from user where name=‘zhang’);

优点:这样简单,缺点是,MySQL执行子查询时,需要创建临时表,查询完成后再删除临时表,有一些额外开销。
连接查询:

select * from order as o inner join user u on o.user_id = u.id where u.name='zhang'; 
7.控制索引数量

索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

8.选择合理的字段类型

尽可能的使用 varchar 代替 char ,因为变长字符串类型存储空间小,可以节省存储空间,查询效率提高。

char:固定字符串类型,该类型在的字段在存储空间上是固定的,固定长度的可以用。

长度固定字符串用char,不固定用varchar。

能用数字类型就不用字符串,字符串处理速度比数字类型慢

尽量用小类型,比如:用bit存布尔值,用tinyint存枚举值等。

9.提升group by效率

主要功能去重,分组;先过滤数据,减少数据,再分组

select id, name ,age from user
group by id
having id <50;

这种写法不好

select id, name ,age from user
where id <50
group by id; 
10.索引优化

强制走哪个索引 force index

select * from user 
force index(索引)
11.sql语句中IN包含的值不应过多

MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from t where num in(1,2,3) 对于连续的数值,能用between就不要用in了.

12.当只需要一条数据的时候,使用limit 1
13.join表不宜超过3个

join用的最多的时left join 和 inner join
left join:两个表的交集和左表的剩余数据
inner join:两个表的交集

inner join mysql会自动选择小表驱动,
left join 左边的表驱动右边的表

14.尽量不适用Like做搜索查询,若要提高效率,可以采用全文检索。
15.尽量避免where字句中使用or拼接、使用!= <> 操作符、对字段进行null值判断、否则会导致引擎放弃索引而走全表扫描。
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值