登录
首页 >  数据库 >  MySQL

gorm一条慢语句分析

来源:SegmentFault

时间:2023-02-24 17:12:24 378浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《gorm一条慢语句分析》,介绍一下MySQL、gorm、MySQL优化,希望对大家的知识积累有所帮助,助力实战开发!

Gorm一条慢语句分析

背景

早上被CTO @ 说是我的服务有一条语句要查询700K条数据,导致mysql记录了这条慢SQL,于是我赶紧排查原因。。。

慢SQL记录

image

定位原因

具体步骤

  1. 查看索引有
    trade_symbol
    和KEY
    idx_tradesymbol_side_price_timestamp
    (
    trade_symbol
    ,
    side
    ,
    price
    ,
    timestamp
    )两个可以使用的索引
  2. 但是没有
    trade_symbol,timestamp
    ,最终mysql选择的索引是
    idx_tradesymbol_side_price_timestamp
    ,我本地建立
    trade_symbol,timestamp
    的联合索引,并去掉SQL中的
    , `deals`.`id` ASC
    语句,发现可以解决这个问题。

image

3.很奇怪的是我查找了我的代码,所有的代码中并没有使用ID主键作为排序的条件,自动更添加了ID ASC排序。

  1. 定位代码中使用的SQL如下,发现是因为使用了First这个函数,使用Find和Limit替代之后,就不会出现这种情况了

 var result = &orm.Deal{}
 err := db.Slave().Model(&orm.Deal{}).Where("trade_symbol = ?", symbol).
 Order("timestamp desc").First(result).Error
 return result.Price, err
}

总结教训

  1. 对Gorm的实现原理没有理解
  2. 测试的时候没有把SQL日志打开,查看日志数据的具体SQL语句

本篇关于《gorm一条慢语句分析》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于数据库的相关知识,请关注golang学习网公众号!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表