Упоминается в Alibaba Java кодекса Конвенция см https://yq.aliyun.com/articles/69327 Правило 3.2.7Почему MySQL LIMIT поиск условий с подзапросом быстрее простого поиска?
SELECT a.* FROM table1 a, (SELECT id FROM table1 WHERE condition LIMIT 100000, 20) b WHERE a.id = b.id
гораздо быстрее, чем
SELECT * FROM table1 WHERE condition LIMIT 100000, 20
В этой статье объясняется, что MySQL будет получать 100020 строки результата и устранить первый 100000. вместо из всего 20 строк.
Верно ли это в MySQL-запросе? Может быть ошибка или дефект?
UPDATE
предположить table1 содержит много столбцов (10+) и условие не слишком сложно (например ip LIKE '192.168.%'
)
Это не всегда так. Это зависит от того, индексируются ли поля, которые появляются в 'condition' или нет (и как они индексируются и как они используются в' condition'). – axiac
и зависит от того, сколько столбцов выбрано, проверено только сейчас :-) – auntyellow
На самом деле, если 'condition' содержит столбцы, которые не содержат ни одного индекса, MySQL вынужден считывать 100020 строк из данных таблицы в обоих случаях. Теоретически эта ситуация делает первый запрос хуже (потому что он должен дважды читать данные таблицы), но на практике, скорее всего, кэширование (внутреннее кэширование MySQL и кэширование файловой системы) не позволяет ему превратиться в катастрофу. – axiac