Является ли SQL с более, где условия быстрее, чем те, с меньшими в MySQL? - PullRequest
0 голосов
/ 26 мая 2019

Я хочу, чтобы большая таблица запрашивалась в столбце datetime каждые 5 минут.

Мое решение таково:

select * from tbl_name where datetime_col < '2019-05-26 20:49:00' and tag_col = 0;

, и что-то сделать с набором результатов, иесли «что-то» успешно, то обновите строку и установите tag_col равным 1.

У одного из моих коллег есть решение, подобное этому:

select * from tbl_name where datetime_col < '2019-05-26 20:49:00' and datetime_col >= '2019-05-26 20:44:00' and tag_col = 0;

, и сделайте что-нибудь с результатомустановить, и если «что-то» не удается, обновите строку и добавьте 5 минут к datetime_col (чтобы оно было выбрано в следующий раз), а если «что-то» удастся, также обновите строку и установите для tag_col значение 1.

Мой вопрос: чей sql быстрее (или они одинаково быстр), когда есть индекс на datetime_col?Спасибо.

1 Ответ

1 голос
/ 26 мая 2019

Если вы выполните этот запрос:

select *
from tbl_name
where datetime_col < '2019-05-26 20:49:00'

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

Если вы выполните:

select *
from tbl_name
where datetime_col < '2019-05-26 20:49:00'
order by datetime_col desc;

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

Запрос вашего коллеги:

select *
from tbl_name
where datetime_col < '2019-05-26 20:49:00' and
      datetime_col >= '2019-05-26 20:44:00';'

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

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

...