В Oracle почему столбцы типа LONG создаются последними? - PullRequest
2 голосов
/ 11 августа 2010

На этой странице документации Oracle упоминается

... столбцы типа LONG создаются последними

но не говорит почему.

Какова причина хранить их в конце строки?

Ответы [ 3 ]

5 голосов
/ 11 августа 2010

A LONG в Oracle совершенно отличается от long в C или C ++. В Oracle LONG немного похоже на VARCHAR2, но с еще большей максимальной длиной (2 ГБ, я полагаю?)

Причина, по которой он хранится последним, заключается в том, что если бы у вас была таблица, которая была (INT a, LONG foo, INT b), и она была сохранена в этом порядке, то для получения значения столбца b она должна была бы прочитать в вся страница данных , занятая столбцом LONG. Сохраняя его в конце, он не должен считывать все эти данные, если в этом нет необходимости.

4 голосов
/ 11 августа 2010

Стоит отметить, что это только ВНУТРЕННЕЕ хранилище.

С точки зрения разработчика, LONG может быть третьим, шестым или первым столбцом или где угодно.И вы все еще можете добавить столбцы в таблицу с длинным.Тем не менее, вы почти наверняка не должны создавать таблицу с LONG больше.Они должны быть CLOB (или BLOB, а не LONG RAW).

create table test_long (id number, val long, create_date date);

desc test_long
           Name                           Null?    Type
           ------------------------------ -------- --------------
    1      ID                                      NUMBER
    2      VAL                                     LONG
    3      CREATE_DATE                             DATE

Я думаю (и если кто-то, кто работал на Oracle, не высказался, это предположение), так это потому, что LONG были / являются наиболеескорее всего, «не вписывается» в строку в блоке.Строка с LONG имела бы хороший шанс иметь размер более 1 блока.LONG, скорее всего, будет разделен (из-за его размера).Если довести это до конца, гораздо более вероятно, что все остальные столбцы будут располагаться вместе в одном блоке.

1 голос
/ 11 августа 2010

(Не эксперт в Oracle - просто нужно было посмотреть, что такое LONG)

В общем, LONG (и другие типы BLOB) не будут зависеть от условий поиска (в JOIN или WHERE).положения).Таким образом, имеет смысл сдвинуть их до конца, чтобы другие столбцы (которые чаще всего запрашиваются вместе) были расположены близко друг к другу.Затем необходимо оценить только эти другие столбцы, чтобы оценить, соответствует ли эта конкретная строка критериям запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...