У мене є таблиця з 490 М рядками та 55 ГБ простору таблиці, тобто близько 167 байт у рядку. У таблиці є три стовпці: a VARCHAR(100)
, a DATETIME2(0)
і a SMALLINT
. Середня довжина тексту в VARCHAR
полі становить близько 21,5, тому необроблені дані повинні становити близько 32 байтів у рядку: 22 + 2 для числа VARCHAR
, 6 для DATETIME2
цілого і 2 для 16-бітного цілого числа.
Зауважте, що пробіл вище є лише даними, а не індексами. Я використовую значення, повідомлене у розділі Властивості | Зберігання | Загальні | Простір даних.
Звичайно, повинно бути трохи накладних витрат, але 135 байт на рядок здається багато, особливо для великої таблиці. Чому це може бути? Хтось ще бачив подібні множники? Які фактори можуть впливати на кількість додаткового простору?
Для порівняння я спробував створити таблицю з двома INT
полями та 1 М рядками. Необхідний простір даних становив 16,4 Мб: 17 байт на рядок, порівняно з 8 байтами необроблених даних. Ще одна тестова таблиця з текстовим INT
та VARCHAR(100)
заповненим тим самим текстом, що і реальна таблиця, використовує 39 байт у рядку (44 К рядків), де я б очікував 28 плюс трохи.
Тож виробничий стіл має значно більше накладних витрат. Це тому, що вона більша? Я очікую, що розміри індексу будуть приблизно N * log (N), але я не бачу, чому простір, необхідний для фактичних даних, має бути нелінійним.
Заздалегідь дякую за будь-які покажчики!
Редагувати:
Усі перелічені поля є NOT NULL
. Реальна таблиця має кластеризовану ПК на VARCHAR
полі та в DATETIME2
полі, у такому порядку. Для двох тестів першим INT
був (кластерний) ПК.
Якщо це має значення: таблиця - це запис результатів ping. Поля - це URL-адреса, дата / час ping та затримка в мілісекундах. Дані постійно додаються та ніколи не оновлюються, але дані періодично видаляються, щоб зменшити їх до кількох записів на годину за URL.
Редагувати:
Дуже цікаву відповідь тут говорить про те, що для індексу з великим кількістю читання і записом, відновлення не може бути корисним. У моєму випадку витрачений простір викликає занепокоєння, але якщо ефективність запису важливіша, можна краще відмовитися від в'ялих показників.