Чи є сенс підкреслити стовпці VARCHAR?


18

Гуглінг, здається, неоднозначно повідомляє, чи VARCHAR2впливає розмір стовпця в Oracle на продуктивність чи ні.

Я хотів би VARCHARтрохи змінити питання про розмір і сподіваюся отримати деяке розуміння в цьому:

Враховуючи (багаторядкові) поля з текстовим текстом ( не короткі речі, як-от імена), які ви хочете зберігати в базі даних (Oracle), чи є якийсь момент (wrt. Performance чи іншим чином) у тому, щоб не збільшити VARCHARпотужність ( VARCHAR2(4000)в Oracle), а вибрати меншим значенням, таким як 1024 або 512, оскільки це, ймовірно, буде достатньо у 98% випадків.


Відповіді:


12

Це впливає на використання пам'яті, особливо коли клієнтська програма повинна виділити достатню кількість пам'яті для отримання набору даних.

Майте на увазі, що багато додатків (особливо веб-додатків) використовують UTF-8, який є багатобайтовим набором символів. Таким чином, вам слід розглянути символи, а не байти.

Якби я очікував понад тисячу символів, я б активно розглядав CLOB. Я б задумався над тим, чи зберігатиме він звичайний текст чи якусь форму розмітки (wiki / html?) Із використанням мов, які не євро. Наприклад, питання та відповіді тут будуть CLOB, але коментарі можуть вміщуватися у VARCHAR.

Якщо ви максимізуєте VARCHAR, то через півроку хтось захоче знову його збільшити, і ви б’єте себе за те, що не використовуєте CLOB.


2
UTF-8 зазвичай використовує один байт для одного символу для західних мов. Це багатобайтовий в тому сенсі, що дозволяє багатобайтові послідовності "втечі" представляти незахідні символи.
Ерік Дж.

9

Як правило, немає міркувань щодо ефективності роботи, хоча є побічні проблеми, які можуть мати значення для вас. Ліміт дозволу varcharслід вважати обмеженням, як і будь-яке інше - саме там потрібно застосовувати ділове правило.

IMO питання, яке вам слід задати: "Чи хочу я запобігти збереженню даних, що зберігаються у цьому полі, довше ніж n байт / символів" - це єдиний визначальний фактор при виборі між varchar(512)і varchar(4000).

Зауважте, що я припускаю, що ви говорите про varcharтип SQL - ситуація відрізняється pl/sqlі вибір довжини може мати вирішальне значення з міркувань розподілу пам'яті.


Спасибі. Що стосується мого (дуже обмеженого) досвіду, будь-яке "ділове правило", що встановлює межу між "500 - 3999", просто довільне, тобто комусь просто сподобалось число. ІМХО, якщо я переходжу до вільного тексту, і немає наслідків щодо впровадження (контекст цього питання), або він розміщений у форматі (4000), або не є вільним текстом. --- Суть, яку я намагаюся зробити в цьому коментарі: я думаю, що ніколи не буде ділового правила, яке допоможе вибрати BTW. 512 і 4000 (якщо тільки це: "якомога більше символів")
Мартін

Якщо це дійсно "якомога більше знаків", то, як говорить @gary, вам слід подумати clob, чи не так?
Джек Дуглас

4

Якщо менша величина буде працювати в 98% випадків, але для 100% випадків потрібно Varchar2 (4000), то у вас є невеликий вибір, крім використання більшого значення . Створення окремої таблиці для 2% значень, а потім узгодження вставок / виділень тощо додасть складності, яка б знищила будь-яку пам'ять або переваги продуктивності від нерозширення поля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.