Оптимизация запроса разбивки на страницы с помощью метода поиска

0

Это, кажется, очень распространенный вопрос, но не получил решения для всех случаев.

Я искал множество статей для оптимизации запроса разбивки на страницы в MYSQL, я нашел метод Seek лучшим решением.

Но в каждом примере метода поиска я обнаружил, что предложение order by в полях числа или типа даты: что, если мы заказываем столбером типа varchar (например: first_name), который может также содержать пустые и нулевые значения, я попробовал (first_name, id) <(null, 15) AND (first_name, id) <('', 15), которые показывают неопределенный результат.

Пожалуйста, предложите, как мы можем обрабатывать эти случаи также в методе поиска.

Теги:
pagination
query-optimization

2 ответа

1
    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.)

0

Неважно, какие типы столбцов вы используете для упорядочивания строк, если они "сортируются" по базе данных. Это включает почти все числа, varchars, даты/время и т.д.

Общим исключением являются тяжелые поля данных, такие как BLOB, CLOB, BINARY и т.д. Этот список очень специфичен для базы данных, поэтому проверьте, какие типы данных могут участвовать в ORDER BY в вашей базе данных.

Также обратите внимание, что для правильного использования метода поиска в списке столбцов, которые вы используете для заказа, должен быть создан уникальный ключ. В противном случае, разбиение на страницы может работать "смешно".

  • 0
    BLOB и BINARY тоже «сортируются» в MySQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню