Это, кажется, очень распространенный вопрос, но не получил решения для всех случаев.
Я искал множество статей для оптимизации запроса разбивки на страницы в MYSQL, я нашел метод Seek лучшим решением.
Но в каждом примере метода поиска я обнаружил, что предложение order by в полях числа или типа даты: что, если мы заказываем столбером типа varchar (например: first_name), который может также содержать пустые и нулевые значения, я попробовал (first_name, id) <(null, 15) AND (first_name, id) <('', 15), которые показывают неопределенный результат.
Пожалуйста, предложите, как мы можем обрабатывать эти случаи также в методе поиска.
WHERE (first_name, id) < ('', 15)
Отличный синтаксис, но производительность отстой! Оптимизатор не знает, как использовать какой-либо индекс, чтобы помочь с ним. Вы должны превратить его в сложное выражение AND
и OR
. И вы должны иметь INDEX(first_name, id)
в этом порядке.
Что касается выражения и т.д., Детали указаны здесь.
PS, не используйте first_name < NULL
; NULL
по сравнению с чем угодно всегда FALSE
. Например:
mysql> SELECT 'Rick' < NULL, 'Rick' > NULL, 'Rick' = NULL, 'Rick' != NULL;
+---------------+---------------+---------------+----------------+
| 'Rick' < NULL | 'Rick' > NULL | 'Rick' = NULL | 'Rick' != NULL |
+---------------+---------------+---------------+----------------+
| NULL | NULL | NULL | NULL |
+---------------+---------------+---------------+----------------+
(И NULL
работает, как FALSE
когда тестируется в WHERE
.)
Неважно, какие типы столбцов вы используете для упорядочивания строк, если они "сортируются" по базе данных. Это включает почти все числа, varchars, даты/время и т.д.
Общим исключением являются тяжелые поля данных, такие как BLOB
, CLOB
, BINARY
и т.д. Этот список очень специфичен для базы данных, поэтому проверьте, какие типы данных могут участвовать в ORDER BY
в вашей базе данных.
Также обратите внимание, что для правильного использования метода поиска в списке столбцов, которые вы используете для заказа, должен быть создан уникальный ключ. В противном случае, разбиение на страницы может работать "смешно".
BLOB
иBINARY
тоже «сортируются» в MySQL.