关于MySQL数据库总结的SQL优化的几个方面

大批量插入数据优化

1、主键顺序插入
2、关闭唯一性校验(索引)
   导入数据前,执行 SET UNIQUE_CHECKS=0,关闭唯一性校验;
   导入完成后,执行 SET UNIQUE_CHECKS=1,恢复唯一性校验。
3、手动提交事务
   导入数据前,执行 SET AUTOCOMMIT=0,关闭自动提交;
   导入完成后,执行 SET AUTOCOMMIT=1,开启自动提交。

insert优化

1、多条insert语句合并成1条insert执行,减少客户端与数据库之间的连接、关闭等消耗。
   例如:INSERT INTO `t_user` VALUES ('1', 'zs');
        INSERT INTO `t_user` VALUES ('2', 'ls');
        INSERT INTO `t_user` VALUES ('3', 'ww');
   优化后:INSERT INTO `t_user` VALUES ('1', 'zs'),('2', 'ls'),('3', 'ww');
2、事务提交改成手动提交。
3、数据有序插入
   例如:INSERT INTO `t_user` VALUES ('3', 'ww');
        INSERT INTO `t_user` VALUES ('2', 'ls');
        INSERT INTO `t_user` VALUES ('1', 'zs');
   优化后:INSERT INTO `t_user` VALUES ('1', 'zs');
         INSERT INTO `t_user` VALUES ('2', 'ls');
         INSERT INTO `t_user` VALUES ('3', 'ww');

order by优化

两种排序:filesort和using index
1、filesort排序,效率低
2、using index排序,通过有序索引顺序扫描直接返回有序数据
   尽量减少额外排序,通过索引直接返回有序数据。where条件和order by使用相同索引,并且order by的顺序  与索引顺序相同,同时order by的字段都是升序或者降序,否则会出现额外的操作。

filesort优化:适当提高sort_buffer_size和max_length_for_sort_data系统变量,来增大排序区大小,提高排序效率。

group by优化

对于包含group by的查询语句,可以添加order by null来避免排序结果的消耗,同时可通过创建索引来提高效率。

 嵌套查询优化

所表关联查询替代子查询

 or条件优化

建议使用union替换or,union优于or

 分页查询优化

在索引上完成排序分页操作,最后根据主键关联查询所需的其他列
例如:select * from t_user limit 2000,10;
   优化后:select * from t_user t,(select uid from t_user order by uid limit 2000,10)a 
          where t.uid=a.uid;

使用SQL提示

1、use index
   使用use index提供希望MySQL去参考的索引列表。
   例如:id_user_name为t_user表的索引,如果希望MySQL去参考这个索引,可以编写如下:
         select * from t_user use index(id_user_name) where name='zs';
2、ignore index
   使用ignore index,希望MySQL去忽略的索引列表。
   例如:id_user_name为t_user表的索引,如果希望MySQL去参考这个索引,可以编写如下:
         select * from t_user ignore index(id_user_name) where name='zs';
3、force index
   强制MySQL使用一个特定索引。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值