单机mysql写性能_MySQL单机优化---SQL优化

SQL优化(变多次维护为一次维护)

Sql优化分为:DDL、DML、DQL

一、DDL优化

1 、通过禁用索引来提供导入数据性能 。 这个操作主要针对有数据库的表,追加数据

//去除键

alter table test3 DISABLE keys;

//批量插入数据

insert into test3 select * from test;

//恢复键

alter table test3 ENABLE keys;

变多次索引维护为一次索引维护

2、 关闭唯一校验

set unique_checks=0  关闭

//批量插入数据

insert into test3 select * from test;

set unique_checks=1  开启

变多次唯一校验为一次唯一校验

3、修改事务提交方式(导入)

set autocommit=0   关闭# false

//批量插入

set autocommit=1   开启 true

变多次事务提交为一次事务提交

二、DML优化

insert into test (name) values(2);

insert into test values(1,3);

insert into test values(1,4);

//合并多条为一条 mybatis的批量操作:

insert into test values(1,2),(1,3),(1,4)

变多次事务提交为一次事务提交

三、DQL优化

(1)   1 order by优化

1、多用索引排序

2、普通结果排序(非索引排序)Filesort

索引本身就是排序的,所以多使用索引。

(2)    group by优化

查询某个时间的付款总和

explain

select DATE_FORMAT(payment_date,'%Y-%m'),sum(amount) from payment GROUP BY DATE_FORMAT(payment_date,'%Y-%m') ;

explain

select DATE_FORMAT(payment_date,'%Y-%m'),sum(amount) from payment GROUP BY DATE_FORMAT(payment_date,'%Y-%m') order by null;

在group by是使用order by null,取消默认排序

(3) subQuery嵌套优化

在客户列表找到不在支付列表的客户

#在客户列表找到不在“支付列表”的客户,查询没买过东西的客户

explain

select * from customer where customer_id not in (select DISTINCT customer_id from payment);

explain

select * from customer c left join payment p on(c.customer_id=p.customer_id) where p.customer_id is null   -- 这种是基于“索引”外链

(4)or优化

在两个独立索引上使用or的性能优于

1、or两边都是用索引字段做判断,性能好!!

2、or两边,有一边不用,性能差

3、 如果employee表的name和email这两列是一个复合索引,但是如果是:name='A' OR email='B'这种方式,不会用到索引!

(5)   limit优化

select film_id,description from film order by title limit 50,5;

select a.film_id,a.description from filqm a inner join (select film_id from film order by title limit 50,5)b on a.film_id=b.film_id

30种sql语句优化:https://www.cnblogs.com/Little-Li/p/8031295.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值