Обновление:
В MySQL
может быть причина для этого.
Поскольку типы переменных (например, VARCHAR
) хранятся с переменными длинами в InnoDB
, ядро базы данных должно пройти по всем предыдущим столбцам в каждой строке, чтобы узнать смещение заданного.
Воздействие может быть таким большим, как 17% для 20
столбцов.
См. Эту запись в моем блоге для более подробной информации:
В Oracle
конечные столбцы NULL
не занимают места, поэтому всегда следует помещать их в конец таблицы.
Также в Oracle
и в SQL Server
, в случае большого ряда, может возникнуть ROW CHAINING
.
ROW CHANING
разбивает строку, которая не умещается в один блок, и охватывает ее по нескольким блокам, связанным со связанным списком.
Чтение конечных столбцов, которые не помещаются в первый блок, потребует обхода связанного списка, что приведет к дополнительной операции I/O
.
См. на этой странице для иллюстрации ROW CHAINING
in Oracle
:
Вот почему вы должны помещать столбцы, которые вы часто используете, в начало таблицы, а столбцы, которые вы не используете часто, или столбцы, которые обычно равны NULL
, - в конец таблицы.
Важное примечание:
Если вам нравится этот ответ и вы хотите проголосовать за него, пожалуйста, также проголосуйте за @Andomar
ответ .
Он ответил тем же, но, кажется, голосовал без причины.