2014-01-24 3 views
1

Я добавляю столбец с типом данных varchar2 (1000). Этот столбец будет использоваться для хранения большого набора сообщений (приблизительно (600 символов). Он влияет на производительность запроса на наличие большой длины datatype, если да, то как? у меня будет запрос выбора этого столбца иногда. есть ли таблица потреблять дополнительную память здесь, даже если значение в этой области в некоторых местах 100 символов?Значительное влияние на производительность длинной длины Datatype в Oracle?

ответ

4

ли это влияет на производительность? это зависит от многого.

Если «добавление столбец "подразумевает, что у вас есть существующая таблица с существующими данными, к которой вы добавляете новый столбец, собираетесь ли вы заполнять новый столбец для старых данных? Если это так, в зависимости от ваших настроек и существующего размера строк , увеличение размера каждой строки в среднем на 600 байт вполне может привести к миграции строк, что потенциально может увеличить количество операций ввода-вывода, которые должны выполняться для получения строки. Вы можете создать новую таблицу с новым столбцом и перенести старые данные в новую таблицу, одновременно добавляя новый столбец, если это вызывает беспокойство.

Если у вас есть запросы, которые включают полное сканирование таблицы в таблице, все, что вы делаете, что увеличивает размер таблицы, будет отрицательно влиять на скорость этих запросов, так как теперь они должны читать больше данных.

Когда вы увеличиваете размер строки, вы уменьшаете количество строк на блок. Это будет иметь тенденцию увеличивать давление на буферный кеш, чтобы вы либо кэшировали меньшее количество строк из этой таблицы, либо быстрее стареете некоторые другие блоки. Любой из них может привести к тому, что отдельные запросы будут выполнять больше физических операций ввода-вывода, а не логических операций ввода-вывода и, таким образом, работать дольше.

A VARCHAR2(1000) будет использовать только любое пространство, необходимое для хранения определенного значения. Если некоторым строкам требуется только 100 байт, Oracle будет выделять только 100 байтов внутри блока. Если другим строкам требуется 900 байт, Oracle будет выделять 900 байтов внутри блока.

+0

Спасибо! Это отвечает на мой вопрос. Является ли хорошей практикой давать такую ​​большую длину dataype в таблицах OLTP? – user3225011

+1

@ user3225011 - Рекомендуется использовать соответствующие типы данных, которые используют соответствующие длины для данных, которые необходимо хранить. Если вам нужно хранить до 1000 байтов данных, 'VARCHAR2 (1000)' отлично подходит для любого приложения. Если вам действительно нужно хранить меньше (или больше), будет нужен другой тип данных. –

Смежные вопросы