mysql查询如何优化

8 篇文章 0 订阅

        mysql开启慢查询日志记录,先查看 show variables like '%quer%';

参数说明:

slow_query_log : 是否已经开启慢查询

slow_query_log_file : 慢查询日志文件路径

long_query_time : 超过多少秒的查询就写入日志

log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)

如何开启呢 set global slow_query_log = on; set long_query_time = 1;set globle log_output = file;

设置完之后,就可以在mysql下的slow_log看到查询超过一秒的日志。

问题发现了,现在判断问题所在:

1.首先服务端那边先看是什么问题导致的mysql查询慢。mysql连接池没有配置等等都问题

2.查看是不是sql的问题。

        有一些用法会导致sql查询变慢。最常见的就是select * 和select 字段 的区别。但是其实*和查单个速度差不多,差距就在于网络传输上,*比较多才会导致慢。

        count (*)和count (id) 前者更快一些。

        join连表,要小表驱动大表,也就是数据量小的表做为主表进行链接,要给连表条件增长索引。

        where 字段创建索引,对于经常使用的where字段能够创建索引,多个where字段能够创建联合索引。对于不怎么经常使用的查询,咱们就不必创建索引了,毕竟索引建多了并很差,维护索引也是有代价的。

        order by排序字段创建索引,给排序字段创建索引是由于索引是有序的,不须要排序,这样的话排序时候直接走有序索引就避免了排序过程。否则mysql还要进行如下排序。这样就能够把排序的时间省掉。

        避免长事务,不要写长事务,不要把没必要要的查询操做归入事务中。

        mysql函数问题,不要再查询中使用mysql的函数,由于使用函数会致使不走索引。

        mysql类型转换问题,不要再查询中让mysql进行类型转换,好比select * from user where mobile = 123.........,由于mysql进行类型转换会使用到函数,而用到函数会致使不走索引。

        多看执行计划,经过explain查询执行计划,看有没有用到索引,mysql有时候会选错索引,由于是否走索引是经过抽样调查来决定的,因此并不许确,再加上要回表查询。因此有时候会不走索引。

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值