Не с PostgreSQL, от руководство :
Очень длинные значения также хранятся в фоновых таблицах, чтобы они не мешали быстрому доступу к более коротким значениям столбцов.
Таким образом, большой символьный столбец (например, TEXT
или VARCHAR
без заданного ограничения размера) сохраняется вне данных основной таблицы. Итак, в PostgreSQL встроена оптимизация «поместите ее в отдельную таблицу». Если вы используете PostgreSQL, разумно расположите свою таблицу и оставьте расположение данных для PostgreSQL.
Я не знаю, как MySQL или другие RDBM упорядочивают свои данные.
Причина этой оптимизации заключается в том, что база данных обычно будет хранить данные для каждой строки в непрерывных блоках на диске, чтобы сократить поиск, когда строка должна быть прочитана или обновлена. Если в строке есть столбец TEXT (или другой тип переменной длины), тогда размер строки будет переменным, поэтому для перехода от строки к строке требуется больше работы. Аналогия была бы различием между доступом к чему-либо в связанном списке и доступом к массиву; со связанным списком вы должны прочитать три элемента по одному, чтобы перейти к четвертому элементу, с массивом, который вы только что сместили 3 * element_size
байт с начала, и вы там за один шаг.