常见SQL语句优化

一:常用SQL的优化

1,优化大批量insert语句

  • 因为innodb类型的表是按照主键的顺序进行保存的,所以导入数据安装主键的顺序排列,可以有效的提高导入数据的效率。
  • 在导入数据前执行SET unique_checks = 0,关闭唯一性校验,再导入结束后执行SET unique_checks = 1,恢复唯一性校验,可以提高导入速度。
  • 如果应用是使用自动提交的方式,建议在导入前设置set autocommit=0,关闭自动提交,导入结束后再执行set autocommit=1,打开自动提交。可以提高导入效率
  • 如果从统一客户导入数据,尽量使用如下格式
insert into test values(1,2),(2,3),(6,7)
不要使用
insert into test values(1,2)
insert into test values(2,3)
insert into test values(6,7)

因为第一种方式大大减少了客户端和数据库的连接时间,关闭等消耗。



2,优化order by语句

mysql的排序方式分2种分别是

  • 通过索引排序
  • 通过Filesort排序

了解了mysql排序方式,优化目标就清晰了:尽量减少额外的排序,通过索引直接返回有序数据。

3,优化group by语句

默认情况下,mysql对所有group by col1,col2,.....的字段进行排序,这与在查询中制定order by col1,col2。。。类似,因此,如果显式包括一个包含相同列的order by 子句,则对mysql的实际性能没有影响,如果查询包含group by 但用户想要避免排序带来的性能消耗,则可以制定order by null禁止排序。

4,优化嵌套查询

子查询,可以使用select语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另外一个查询中,使用子查询可以一次性地完成很多逻辑上需要多个步骤才能完成的sql操作,同时也可以避免事务或者表死锁,并且写起来也很容易,但是,在某些情况下一个子查询可以用更加效率的join替代。连接(join)之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上需要2个步骤的工作。

5,MySQL如何优化OR条件

对于含有or的查询子句,如果要利用索引,则OR间的每个条件都必须使用索引,如果没有索引,则该考虑增加索引。

6,优化分页查询

方式一:在索引上完成排序分页的操作,左后根据主键关联回原表查询所需要的其他列内容,例如,对电影表film根据标题title排序后取某一页的数据,直接查询的时候,能够从Explain的输出结果中看到优化器实际做了全表扫描,处理效率不高:


修改后的语句


第二种优化思路

和开发人员协商,翻页的过程中增加一个参数,last_page_record,用来记录上一页最后一行的id,假设id是15460查询sql可以是

select payment_id from payment  where payment_id < 15460 order by payment_id desc limit 10。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值