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

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

 

在某一天使用时,发现explorer响应很是缓慢,常常数据没法返回,通过简单的接口抓包,查看日志分析,发现后台系统连接mysql出现了超时的情况:spring

 

 

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

查询时间很长的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万条的交易记录,并且单条记录因为包含了各类交易信息,致使数据量较大。浏览器

相关文章
相关标签/搜索