Подтвердить что ты не робот

По умолчанию сортировка по порядку в MySQL (ALTER TABLE... ORDER BY...;)

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

ALTER TABLE tablename ORDER BY columnname ASC;

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

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

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

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

Ответ 1

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

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

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

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

Как насчет UPDATE? Предположим, что в таблицу не добавлены INSERT или DELETE, но только обновления - будет ли порядок сортировки неповрежденным?

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

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

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

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

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

Ответ 2

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

Ответ 3

Порядок сортировки по умолчанию кажется попыткой быть ленивым, что в конечном итоге даст вам массу головных болей по дороге. Я бы не коснулся его вообще, и просто не забудьте указать Order By в моих запросах.