(больше всего объясняет GMB)
Почему это происходит? почему порядок строк в таблице изменяется в соответствии с новым индексом в столбце name
Используйте EXPLAIN SELECT ...
- это может дать представление о том, что я собираюсь предложить.
Вы добавили INDEX(name)
. В InnoDB столбцы PRIMARY KEY
прикреплены к концу каждого вторичного индекса. Таким образом, это фактически BTree, упорядоченное по (name,id)
и содержащее только эти столбцы.
Теперь Оптимизатор может свободно извлекать данные из индекса, поскольку он имеет все, что вы просили (идентификатор и имя). (Этот индекс называется «покрывающим».)
Поскольку вы не указали ORDER BY
, порядок набора результатов действителен (см. Обсуждение GMB).
Мораль рассказ: Если хотите заказать, укажите ORDER BY
. (Оптимизатор достаточно умен, чтобы «не делать дополнительной работы», если он видит, как предоставить данные без сортировки.
Дальнейший эксперимент: добавьте еще один столбец в таблицу, но не меняйте индексы. Теперь вы обнаружите, что SELECT * FROM t
заказывается иначе, чем SELECT id, name FROM t
. Думаю, я дал вам достаточно подсказок, чтобы предсказать эту разницу, если нет, спросите.