в таблице?
Есть задача, сократить объем инсерта. Сокращать планирую построением топа самых жирных вставляемых полей(с дальнейшим анализом нужности). Размер изначально пустой таблицы после инсерта составляет 45гб. В таблице 600 полей. Я посчитал средний вес каждого поля функцией avg(datalehgth(colName)). Однако после сложения всех средних значений веса столбцов и умножении на кол-во строк, я получаю 7.5гб а не 45. То есть что-то я явно делаю не так. Подскажите пожалуйста, как можно корректно построить топ самых тяжёлых столбцов в табле? (Также в табле большая часть нулевых столбцов без значений, но они как я понимаю не должны иметь существенного веса)
600 полей в таблице?
а каким образом ты будешь сокращать? ну допустим ты узнал что 10, 100 и 555 поля больше всех
Эти поля передам в продуктовую команду для анализа необходимости их хранения для дальнейшего расчета
из-за каких-то 45гб будешь людей напрягать? причем даже не 45, а скажем гб 10 тебе скинут
Буду напрягать, работа такая 😂
Вам надо просто посчитать sum(datalength) для каждой колонки Дальше оно с точностью до фактического fillfactor и нюансов типа одного бита на null даст нужное Вероятно, вам стоит почитать про секционирование и columnstore
Спасибо я попробую
План запроса и понимание всего процесса есть? Вдруг у тебя там селект тупит который используется для вставки
Селект Каунт по условию работает секунд 15. Топ 100 с сортировкой по условию в пределах минуты. Как я вижу с логикой селекта проблемы маловероятны.
Потому что пустое поле не означает что под него не выделено место. Скопируй интересующую колонку (одну) во временный объект с той же метадатой и замерь его размер
Спасибо попробую. Правда пока не представляю как это сделать для 600 столбцов
Обсуждают сегодня