Запрос того же типа в той же таблице, занимающий разное время для выполнения MySQL - PullRequest
0 голосов
/ 01 сентября 2018

У меня несколько запросов к одной и той же таблице. Но первый принимает 2 мс, в то время как другие - едва 390 мкс. Я не могу выяснить причину. Я использую MariaDb 10.2

Принимая 2 микросекунды

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

Другие ниже Принимая едва 390 мкс

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 ]

0 голосов
/ 02 сентября 2018

Может быть много причин, почему запросы меняют скорость. В вашем случае это скорее всего из-за кэширования страниц на диске или кэширования запросов .

  1. Кэширование страницы диска происходит на уровне операционной системы. Как только страницы диска загружены в память, второй запрос не должен загружать их снова, пока они не устареют, не будут удалены, или вы перезапустите ядро ​​базы данных.

  2. Кэширование запросов выполняется самим механизмом базы данных. Пока сами данные не изменены (без вставок, без обновлений, без удалений), результат запроса остается действительным, и нет необходимости повторять тот же самый запрос . Результат предыдущего выполнения просто отправляется обратно клиенту.

Но есть много других вариантов. Трюки с низкоуровневыми базами данных весьма полезны, поэтому вы не сможете узнать обо всем, что происходит, если не решите стать программистом MySQL или MariaDB.

0 голосов
/ 01 сентября 2018

Вопрос в том, почему первый случай быстрый, но если вам нужно, чтобы этот запрос был в целом быстрым, и если у вас еще нет индекса для этих столбцов, вы можете попробовать:

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

, а затем выполните запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...