Вопрос: Может ли кто-нибудь уточнить это?
A: Перед тем, как идти «ошибка в MySQL» маршрут, который @a_horse_with_no_name кажется нетерпеливы мчаться вниз, мы действительно должны гарантировать, что это повторяемые поведение, и это не просто причуда.
И для этого нам действительно нужно увидеть результат прошедшего времени из нескольких прогонов запроса.
Если кэш запросов включен на сервере, мы хотим запустить запросы с добавлением подсказки SQL_NO_CACHE
(SELECT SQL_NO_CACHE table1.id ...
), чтобы мы знали, что мы не извлекаем кешированные результаты.
Я бы повторил выполнение каждого запроса по крайней мере три раза и выкинул результат из первого запуска и усреднил другие прогоны. (Цель этого заключается в том, чтобы исключить влияние данных таблицы, которые не находятся в кеше, ни буфера InnoDB, ни кеша файловой системы.)
Также запустите EXPLAIN SELECT ...
для каждого запроса. И сравните планы доступа.
Если какая-либо из этих таблиц является механизмом хранения MyISAM, обратите внимание, что таблицы MyISAM подлежат блокировке с помощью операций DML; в то время как в таблице выполняется операция INSERT, UPDATE или DELETE, операторы SELECT будут заблокированы от доступа к таблице. (Но пять секунд для этого немного важны, если только они не являются действительно большими таблицами или действительно неэффективными операторами DML).
С помощью InnoDB запросы SELECT не будут блокироваться операциями DML.
Истекшее время также будет зависеть от того, что еще происходит в системе.
Но общее количество прошедшего времени включает в себя больше, чем просто время на сервере MySQL. Временное включение MySQL general_log позволит вам отображать операторы, которые фактически обрабатываются сервером.
Первый использует также соединение (только устаревший синтаксис с неявными объединениями в предложении where). Поскольку оба они на 100% равны с точки зрения того, что они должны делать, я бы заподозрил здесь ошибку в MySQL. –
Какой из них вы запускали первым? Что говорит EXPLAIN? – evanv
Это тот же запрос. Я подозреваю, что вы смотрите на кеш – Strawberry