У меня есть таблица в тузде InnoDB следующим образом:Имеет ли комбинация> = ИЛИ <= запуск полного сканирования таблицы?
messageIdStart | messageIdEnd | blob
------------------------------------
40 50 ...
51 58 ...
59 70 ...
...
Я хочу, чтобы все строки, которые имеют идентификаторов больше, чем определенное значение.
Например, я хочу, чтобы все строки, которые имеют сообщения с идентификаторами больше, чем 55. Я хотел бы сделать:
select * from table
where messageIdStart >= 55 or messageIdEnd <= 55;
Это дало бы мне последние две строки в примерных данных, и это хорошо.
Требуется ли для этого типа запроса полное сканирование таблицы? Будет ли он плохо масштабироваться? На обоих этих столбцах есть индекс.
Если бы я имел одну строку для каждого сообщения, я мог бы просто сделать:
select * from table where messageId >= 55;
, но это то, что я унаследовал.
Я думаю о попытке переформатировать набор данных во второй формат, но не хочу преждевременно оптимизировать.
Благодаря
«На обоих этих столбцах есть индекс». Означает ли это, что на обоих столбцах есть составной индекс, или есть один индекс на колонки, т. Е. 2 индекса? – Musa
Существует один индекс за столбец (не составной индекс). Я мог бы создать составной индекс. – user3203425
Если это так, тогда ваш запрос не будет использовать сканирование таблицы, вы также можете проверить с помощью команды объяснения. http://dev.mysql.com/doc/refman/5.7/ru/explain.html – Musa