mysql order by,limit,where结合引起的效率问题

问题背景:一个以太坊的浏览器(eth-explorer),后台需要建立数据库保存这条公链上的所有交易记录,用于用户随时查询,展示最新区块和交易等功能,表的结构如下:

 

在某一天使用时,发现explorer响应非常缓慢,经常数据无法返回,经过简单的接口抓包,查看日志分析,发现后台系统链接mysql出现了超时的状况:

 

 

于是,登录mysql,执行show full process list分析查询语句,很快的发现到了某条慢查询耗费了大量的时间,最长达到了30s+,比链接池设定的10s超时时间都还要长,因而后台系统自然报错(后台系统使用的是springboot+mybatis框架)

查询时间很长的SQL语句如下:(表名和地址信息删去)

1 SELECT (`hash`,`block_hash`,`block_height`,`tx_seq`,`from`,`to`,`status`,`value`,`nonce`,`timestamp`,`type`,`data`,`contract_address`,`gas_price`,`gas_limit`,`gas_used`,`created_at`,`execute_error`) FROM `table_a` 
2 WHERE (`from` = 'xxxxx' or `to` = 'xxxxx') ORDER BY `block_height` DESC,`tx_seq` DESC LIMIT 125,25

 

经过查询,首先是xxxxx这个地址里包含了320万条的交易记录,而且单条记录由于包含了各种交易信息,导致数据量较大。

 

转载于:https://www.cnblogs.com/qq29oo/p/9695775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值