Запрос на разбиение на страницы MySQL обычно выполняетсяlimit
реализовать.
MySQLlimit
Основное использование простое.limit
Принимает 1 или 2 целочисленных параметра, если это 2 параметра, первый — это смещение указанной первой возвращаемой строки записи, а второй — максимальное количество возвращаемых строк записи. Смещение начальной строки записи равно 0.
Для совместимости с PostgreSQL,limit
также поддерживаетlimit # offset #
.
проблема:
Для небольших смещений используйте непосредственноlimit
С запросами проблем нет, но чем больше объем данных, тем больше страниц выгружается,limit
Чем больше смещение оператора, тем медленнее будет скорость.
Оптимизационное мышление:
Избегайте сканирования слишком большого количества записей при большом объеме данных.
решать:
Метод пейджинга подзапроса или метод пейджинга JOIN.
Эффективность пейджинга JOIN и пейджинга подзапросов в основном находится на одном уровне, и затраты времени в основном одинаковы.
Вот пример. Как правило, первичный ключ MySQL представляет собой числовой тип с автоинкрементом, и в этом случае для оптимизации можно использовать следующие методы.
Возьмем в качестве примера таблицу из 800 000 фрагментов данных в реальной производственной среде, чтобы сравнить время запроса до и после оптимизации:
-- 传统limit,文件扫描
[SQL]SELECT * FROM tableName ORDER BY id LIMIT 500000,2;
受影响的行: 0
时间: 5.371s
-- 子查询方式,索引扫描
[SQL]
SELECT * FROM tableName
WHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 500000 , 1)
LIMIT 2;
受影响的行: 0
时间: 0.274s
-- JOIN分页方式
[SQL]
SELECT *
FROM tableName AS t1
JOIN (SELECT id FROM tableName ORDER BY id desc LIMIT 500000, 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT 2;
受影响的行: 0
时间: 0.278s
Видно, что оптимизированная производительность улучшилась почти в 20 раз.
Принцип оптимизации:
Подзапросы выполняются по индексу, в то время как обычные запросы выполняются по файлу данных.Вообще говоря, индексный файл намного меньше, чем файл данных, поэтому работать с ним будет более эффективно. Потому что, чтобы вынуть все содержимое поля, первое нужно охватить большое количество блоков данных и вынуть, а второе в основном делается напрямуюПосле позиционирования в соответствии с полем индекса извлекается соответствующий контент., эффективность, естественно, значительно повышается.
Поэтому даlimit
оптимизация, не используя напрямуюlimit
, но сначала получить идентификатор смещения, а затем использовать его напрямуюlimit
размер для получения данных.
В реальной работе над проектом аналогичный шаблон стратегии можно использовать для управления разбиением на страницы. Например, если имеется 100 единиц данных на странице, и считается, что они находятся в пределах 100 страниц, используется самый простой метод разбиения по страницам. больше 100, используется метод пейджинга подзапросов.
Статьи по Теме
- Индекс MySQL и оптимизация запросов
- Установите распакованную версию MySQL в операционной системе Windows.
- Использование автоматического увеличения первичного ключа MySQL
- Введение в механизм хранения базы данных MySQL