Це, безумовно, є. Ми це детально обговорили під цим пов'язаним питанням:
Простір виділяється в кратних розмірах MAXALIGN
, що, як правило, становить 8 байт на 64-бітній ОС або (набагато рідше) 4 байти на 32-бітній ОС. Якщо ви не впевнені, перевірте pg_controldata
. Це також залежить від типів даних індексованих стовпців (деякі вимагають вирівнювання) і фактичного вмісту.
Індекс на, скажімо, два integer
стовпчики (по 4 байти в кожному) зазвичай закінчується таким же великим, як і індекс лише на одному, де ще 4 байти втрачаються на вирівнювання.
У такому випадку дійсно немає недоліків для планувальників запитів використовувати індекс на (a,b)
- порівняно з індексом на просто (a)
. І, як правило, бажано для декількох запитів використовувати один і той же індекс. Шанс, щоб він (або його частини) перебував у (швидкому) кеші, зростає при спільному використанні.
Якщо індекс вже підтримується, інший індекс (a,b)
не має сенсу створювати просто, (a)
якщо він не є значно меншим. Те ж саме НЕ вірно для (b,a)
VS. (a)
. Щоб отримати докладнішу інформацію, перейдіть за посиланням у першому рядку.
Виходячи з протилежного напрямку, коли вам потрібен додатковий індекс, подібний до цього (a,b)
, тоді розгляньте можливість скидання наявного індексу просто (a)
- якщо можливо. Часто це неможливо, оскільки це індекс ПК або UNIQUE
обмеження. Оскільки Postgres 11, ви можете уникнути, просто додавши b
до цього визначення визначення обмеження INCLUDE
. Деталі в посібнику.
Або(b,a)
замість цього створити новий індекс, щоб просто b
додатково покривати запити . Для лише умов рівності порядок індексних виразів в btree індексах не має значення. Це, однак, при участі в дальності. Побачити:
Можливі недоліки включення додаткових стовпців в індекс, навіть якщо для цього використовується лише простір, втрачений в іншому випадку для вирівнювання прокладки:
- Щоразу, коли додатковий стовпець оновлюється, індекс також потребує оновлення, що може призвести до збільшення витрат на операції запису та створення більшої кількості індексу.
- ГОРЯЧІ оновлення (Heap Only Tuple) на столі не можливі під час участі будь-якого стовпчика індексу.
Більше про оновлення HOT:
Як виміряти розміри об'єктів: