我在同一张table上有几个问题。但第一个需要2毫秒,而其他人几乎不需要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毫秒!
2条答案
按热度按时间68bkxrlz1#
查询改变速度的原因有很多。在您的情况下,这很可能是由于磁盘页缓存或查询缓存造成的。
磁盘页缓存发生在操作系统级别。一旦磁盘页被加载到内存中,第二个查询就不需要再次加载它们,直到它们过时、被逐出或重新启动数据库引擎。
查询缓存由数据库引擎本身完成。只要数据本身没有被修改(没有插入,没有更新,没有删除),查询结果仍然有效,并且不需要再次执行相同的查询。上一次执行的结果被发送回客户机。
但是,还有很多其他的选择。低级数据库技巧非常有用,因此除非您决定成为一名mysql或mariadb程序员,否则您无法真正了解正在发生的一切。
fgw7neuy2#
问题是为什么第一种情况是快速的,但如果您需要,这个查询通常是快速的,如果您还没有这些列的索引,您可以尝试:
然后运行查询。