在同一张表上进行相同类型的查询需要花费不同的时间执行MySQL

时间:2018-09-01 19:09:18

标签: mysql mariadb

我在同一张桌子上的查询很少。但是第一个使用2 MS,而其他几乎不使用390μs。我找不到原因。我正在使用MariaDb 10.2

花费2微秒

select `ask_price` from `trades` where (`coin` = 'HLCN' and `market` = 'ETH') order by `time` desc limit 1

其他低于390μs的时间

select `ask_price` from `trades` where (`coin` = 'BTC' and `market` = 'ETH') order by `time` desc limit 1

select `ask_price` from `trades` where (`coin` = 'BCH' and `market` = 'ETH') order by `time` desc limit 1

为什么第一个要消耗2-3 MS!

2 个答案:

答案 0 :(得分:0)

问题是为什么第一种情况很快,但是如果需要,该查询通常很快,并且如果您还没有这些列的索引,则可以尝试:

create index idx_name on `trades`(`coin`,`market`,`time`);

然后运行查询。

答案 1 :(得分:0)

查询更改速度可能有很多原因。就您而言,很可能是由于磁盘页面缓存查询缓存

  1. 磁盘页面缓存发生在操作系统级别。将磁盘页面加载到内存中之后,第二个查询就不需要再次加载它们,直到它们变得陈旧,被逐出或您重新启动数据库引擎为止。

  2. 查询缓存由数据库引擎本身完成。只要数据本身没有被修改(没有插入,没有更新,没有删除),查询结果仍然有效,并且不需要再次执行 same 查询。上一次执行的结果只会发送回客户端。

但是,还有许多其他选择。低级数据库技巧非常有用,因此,除非您决定成为一名MySQL或MariaDB程序员,否则您无法真正发现所有发生的事情。