Хобрук: Ваш путь к мастерству в программировании

Как оптимизировать таблицу SQL Server с 320 миллионами строк и только с типами данных varchar (max)

У меня есть таблица с более чем 320 миллионами строк и 34 столбцами, все с типом данных varchar(max) и без индексации.

Я считаю, что подведение итогов всей таблицы занимает очень много времени. Может ли кто-нибудь предложить лучший способ оптимизировать это, учитывая следующую цель, которую мне нужно использовать:

  • простые запросы на выборку
  • сумма по нескольким столбцам

Должен ли я создать некластеризованный индекс для столбца с последовательным номером строки, который я добавил?

Размер моей таблицы на диске составляет примерно 185 ГБ.

я использую

  • Windows Server 2008 R2
  • Процессор Xeon 2.09 x 2
  • 16 ГБ ОЗУ
  • SQL Server 2008 R2

Поскольку у данных нет уникального столбца, я уже добавил последовательность с целым числом, и на выполнение операции ушло 2 дня.


  • Начните с исправления типов данных. С какой стати все 34 столбца должны быть varchar(max)? Вы хотите выполнять операции SUM, поэтому некоторые из них должны быть числовыми. 30.12.2018
  • Каждая запись в среднем составляет 578 байт, поэтому, вероятно, мало, если какой-либо из столбцов действительно нуждается в MAX, даже если они являются строками. 30.12.2018
  • На самом деле, данные были загружены через массовую вставку с файлом формата не xml из более чем 16000 тысяч файлов фиксированной длины. Чтобы убедиться, что все данные загружаются правильно, я использовал тип varchar(max). 30.12.2018
  • Есть два столбца, которые необходимо преобразовать в bigint. Позвольте мне попробовать сделать это для протокола. Вы предлагаете какую-либо индексацию столбца id, который уже является последовательным целым числом? 30.12.2018
  • Так что в лучшем случае это следует использовать для постановки. Затем загрузите его в таблицу с разумной схемой и индексами для оперативных запросов. varchar(max) не может быть проиндексирован 30.12.2018
  • Еще одна проблема со строковым символом в столбце заключается в том, что, поскольку исходные файлы имеют фиксированную длину, все начальные и конечные пробелы загружаются как часть поля. У вас есть идеи, как я могу обрезать их для каждого поля или столбца, или мне следует подумать об этом перед загрузкой на сервер mssql? 30.12.2018
  • @ShahbazKhan, я рекомендую обрезать пробелы перед загрузкой в ​​базу данных. Вы также можете выполнить другое преобразование и проверку в процессе ETL вместо ELT. 30.12.2018

Ответы:


1
  1. Создайте новую таблицу с подходящими типами данных. Это самая важная часть - определить тип для ваших столбцов. nvarchar(max) — самый распространенный тип, поэтому его нельзя оптимизировать. Используйте int или bigint для чисел, используйте nvarchar(N), где N - максимальная длина. Используйте bit для логического значения и т. д.
  2. Создать первичный ключ, индексы для поиска
  3. Скопируйте данные из старой таблицы в новую порциями по 10000 или 100000 строк.
30.12.2018
  • Спасибо за помощь. На загрузку данных в другую таблицу с полной трансформацией данных ушло 16 часов. 02.01.2019
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..