Я только что обнаружил следующее поведение MySQL с использованием движка InnoDB. Есть ли способ объяснить значительную разницу во времени выполнения?
Первый запрос:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp BETWEEN 1207000800290 AND 1207690900290
Время выполнения: 0,715 сек.
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2', 'PRIMARY', '8', NULL, '3278190','Using where'
Второй запрос:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp > 1207000800290
Время выполнения: 0,002 сек.
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2', 'ask', '4', NULL, '5850604', 'Using where; Using index'
Третий запрос:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp < 1207690900290
Время выполнения: 0,651 сек.
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2', 'PRIMARY', '8', NULL, '3278190', 'Using where'
EXPLAIN говорит мне, что только второй запрос использует Index. Моя таблица содержит 83 млн. строки, первичный ключ — это временная метка. У меня также есть индекс (спросить, отметка времени) и один по запросу (который является избыточным и предназначен только для целей тестирования). Почему MySQL использует индекс только для второго запроса?
SQL_NO_CACHE:SELECT SQL_NO_CACHE ask FROM history_time WHERE ask> 1.5790 AND timestamp > 1207000800290- person frail   schedule 12.01.2012