Производительность таблицы с 29 колонками Oracle varchar2 - PullRequest
1 голос
/ 23 марта 2011

Странный вопрос для странной ситуации, в которой я нахожусь.

Есть ли заметная разница в производительности при выборе всех столбцов таблицы, которая имеет 29 столбцов varchar (255)?

Улучшится ли производительность, если они будут varchar (50) вместо этого?

Большинство данных в столбцах содержат менее 30 символов, если это имеет значение.

Ответы [ 2 ]

5 голосов
/ 23 марта 2011

Это зависит.

Если вы просто запрашиваете данные в блоке PL / SQL, где отсутствует сетевой трафик, не должно иметь значения, если предположить, что в обоих случаях данные фактически имеют одинаковый размер. Вы можете использовать чуть больше памяти PGA, если извлекаете данные в переменные PL / SQL, но маловероятно, что это приведет к сколько-нибудь заметному изменению производительности.

Однако, если вы выбираете данные по сети, это может иметь значение. Многие драйверы в конечном итоге выделяют пространство на основе потенциального размера результирующего набора (т.е. 255 байтов или 255 символов в зависимости от набора символов, NLS_LENGTH_SEMANTICS и других битов забавы глобализации), что может означать, что вы будете выделять в 5 раз больше Оперативной памяти на клиентском компьютере больше, чем необходимо (где «клиентский компьютер» здесь может относиться к среднему уровню трехуровневого приложения). Это, в свою очередь, может повлиять на производительность.

Исходя из вашего имени пользователя, я склонен подозревать, что вы используете Java и JDBC. Если вы используете драйвер JDBC типа 4, я бы поспорил, что вы будете распределять пространство только в зависимости от размера данных. С другой стороны, если вы используете мост JDBC-ODBC, я бы поспорил, что драйвер ODBC выделяет пространство в зависимости от максимального размера столбца. Это, очевидно, зависит от используемого вами драйвера - это мое личное обоснованное предположение, не основанное на фактическом профилировании использования памяти различными драйверами.

1 голос
/ 23 марта 2011

29 столбцов, умноженных на 30 символов, - менее 1 КБ на строку. Существует множество ситуаций, когда вы можете получить строки размером 1 КБ в базе данных и не столкнуться с проблемами производительности.

Поскольку производительность основана на количестве данных , хранящихся в столбце varchar, а не на максимальном размере столбца, производительность не улучшится при сокращении столбца (если только вы не обрезать данные при этом).

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