digital-garden/knowledge/dev/database/ORDER BY.md

19 lines
1.9 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
aliases:
tags:
- зрелость/🌱
date:
- - 2024-02-05
zero-link:
- "[[00 Базы Данных]]"
parents:
2024-06-17 18:42:04 +03:00
- "[[00 SQL]]"
linked:
2024-06-13 21:01:37 +03:00
---
2024-06-17 18:42:04 +03:00
При использовании разно-направленной сортировки (`ORDER BY a DESC, b ASC`) не используются индексы. Хотя MySQL 8+ поддерживает такие сортировки, но нужно создавать специальный разно-направленный индекс.
ORDER BY id LIMIT 10000, 10 это плохо, т.к. сервер будет выбирать все 10 тыс. строк + еще 10, потом 1001-ю отбрасывать и только 10 выдавать. Такие вещи надо каким-то образом менять. Либо ID больше 10 000, LIMIT 10. Когда у нас offset большое число с точки зрения того, что делает сервер, это плохо.
Нельзя использовать ORDER BY rand(), т.к. эта структура делает копию всех наших данных, загоняет во временную таблицу, добавляет туда еще один столбец, куда записывает результат функции rand и потом файловую сортировку всего этого огромного массива. Поэтому, если мы хотим выбрать случайную строку, ORDER BY rand() можно применять лишь на небольших объемах данных, на больших это сразу убьет всю производительность.
Группировка по умолчанию делает и сортировку, поэтому, если нам сортировка не нужна, то мы должны указать в явном виде ORDER BY null.