Сортировка по умолчанию в MySQL (ALTER TABLE ... ORDER BY ...;) - PullRequest
17 голосов
/ 07 апреля 2009

Предположим, что порядок по умолчанию для MySQL-таблицы (ISAM) изменяется путем выполнения:

ALTER TABLE tablename ORDER BY columnname ASC;

С этого момента я гарантирую для получения записей, извлеченных из таблицы в порядке «столбец ASC», при условии, что в моих запросах не указано «ORDER BY» (т.е. «SELECT * FROM tablename WHERE») ... LIMIT 10; ")?

Есть ли какие-нибудь угловые случаи, о которых мне следует знать?

Обновление № 1: Большое спасибо Quassnoi, который правильно указал, что INSERTs и DELETEs портят порядок. Это приводит меня к следующим вопросам:

  • А как насчет ОБНОВЛЕНИЙ? Предположим, что в таблицу не делаются INSERT или DELETE, а только обновления - будет ли порядок сортировки не поврежден?
  • Предположим, что сделаны INSERT и DELETE - как мне "перестроить" сортировку снова, скажем, раз в день (в этом конкретном случае таблица меняется только ежедневно, поэтому перестройка ежедневно после внесения изменений должна быть в порядке! ). Исправляет ли это REPAIR TABLE или должен добавить команду ALTER TABLE ... ORDER BY снова?

Ответы [ 2 ]

24 голосов
/ 07 апреля 2009

Из документации :

Обратите внимание, что таблица не остается в этом порядке после вставки и удаления

На самом деле, если вы введете SELECT ... ORDER BY для этой таблицы, опция ALTER TABLE не избавит вас от filesort, но вместо этого сделает filesort намного быстрее.

Сортировка уже упорядоченного набора эквивалентна просмотру этого набора, чтобы убедиться, что все в порядке.

А как насчет ОБНОВЛЕНИЙ? Предположим, что в таблицу не делаются INSERT или DELETE, а только обновления - будет ли порядок сортировки не поврежден?

Если ваша таблица не содержит динамических полей (например, VARCHAR или 'BLOB'), то , наиболее вероятно MyISAM, не будет перемещать ее при обновлении.

Я бы не стал полагаться на такое поведение, если бы я строил атомную электростанцию ​​или что-то, за что мне платили.

Предположим, что сделаны INSERT и DELETE - как мне "перестроить" сортировку снова, скажем, раз в день (в этом конкретном случае таблица меняется только ежедневно, поэтому перестройка ежедневно после внесения изменений должна быть в порядке! ). Исправляет ли это REPAIR TABLE или нужно добавить команду ALTER TABLE ... ORDER BY снова?

Вам нужно будет сделать ALTER TABLE ... ORDER BY.

REPAIR просто исправляет физическую структуру поврежденной таблицы.

3 голосов
/ 08 января 2016

Физическое упорядочение столбца может сэкономить нагрузку ввода-вывода. Это совершенно законный метод, используемый в современных системах для ускорения времени запроса. Вам просто нужно время от времени переустанавливать данные, чтобы они оставались кластерными. То, что некоторые люди не слышали об этом, не означает, что его не существует. - 25-летний продвинутый ветеран разработки БД.

...