Реструктуризация схемы базы данных для оптимизации производительности и пространства - PullRequest
0 голосов
/ 23 января 2019

Я работаю над SQL SERVER 2012 Express Edition , (я не архитектор баз данных, а только c # dev) У меня была таблица, в которой было 30 столбцов и более 10 миллионов строк

CID      PID    DID     FID  DateTimeStamp   P01    P02   P03.....P30

CI1001  PI1001  DI1001  30  2017-04-02 9:14  12     230   230

CI1001  PI1001  DI1002  51  2017-04-02 9:14  34     3430  3430

CI1001  PI1001  DI1003  5   2017-04-02 9:14  56     340   340

CI1001  PI1001  DI1004  4   2017-04-02 9:14  78     340   340

CI1001  PI1001  DI1005  5   2017-04-02 9:14  33     340   340

Проблема, с которой я сталкиваюсь в данной схеме:

  1. Я не могу добиться динамического добавления столбцов в этой структуре.Например, когда-нибудь в нескольких местах моего клиента мне нужно добавить дополнительные столбцы рядом с «P01, P02 ... P30», такие как P31, P32.

  2. Нет необходимости, чтобы все столбцы, например, P01, P02 ... P30, имели значения все время, возможно, будут значения для P01, P02 ... P020 и остальныхбудет пустым / нулевым.Таким образом, выделенное пространство там теряется.

  3. В текущей схеме мне нужно применить 2, 3 индекса для поддержания производительности моих запросов и процедур.Он работает нормально, но, к сожалению, сам по себе индекс использует 30% памяти, и с момента его экспресс-выпуска он создает проблему ограничения размера файла для меня через несколько месяцев.

Теперь я собираюсь разбить схему таблицы выше в две таблицы, такие как

Таблица будет содержать уникальный код для каждого столбца, например (P01, P02, P03)

   CID       PID        PCODE      PNAME
   CI1001   PI1001      C1          P01
   CI1001   PI1001      C2          P02
   CI1001   PI1001      C3          P03
   CI1001   PI1001      C4          P04
   CI1001   PI1001      C5          P05

Это будет фактическая таблица транзакций, где для каждого столбца я вставлю одну новую строку.

CID     PID     DID     FID   PCODE       DateTimeStamp            Value
CI1001  PI1001  DI1001   30   C1          2017-04-02 9:14          230
CI1001  PI1001  DI1002   51   C2          2017-04-02 9:14          3430
CI1001  PI1001  DI1003   3    C3          2017-04-02 9:14          340
CI1001  PI1001  DI1004   4    C3          2017-04-02 9:14          340
CI1001  PI1001  DI1005   5    C5          2017-04-02 9:14          340

С этой схемой я уверен, что это позволит добавить любое нет.Колонок во время выполнения, но я не уверен, получу ли я прирост производительности и размера с этим.Кто-нибудь может предложить, если этот подход является правильным или какие-либо входные данные о том, как разработать такую ​​схему?

Отредактировано

С этой схемой 3 из моих проблем, которые я объяснил выше, были исправлены, и я сделал несколько пробных запусков по этому и только с индексом весь мой набор запросовработать бесперебойно, поэтому производительность - это не проблема, а пространство, поскольку оно потребляет буквально в 7 раз больше, чем предыдущий.

Ниже приведена схема из двух таблиц

ОСНОВНАЯ ТАБЛИЦА СДЕЛОК: -

    ClientID      varchar(8)    
    PlantID       varchar(8)
    DeviceID      varchar(8)    
    FeederID      tinyint   
    PCODE         varchar(10)   
    Dates         date
    TimeStamp     time(7)   
    VALUE         decimal(19, 3)

TABALE с УНИКАЛЬНЫМ КОДОМ ДЛЯ КАЖДОГО COL

ClientID     varchar(8) 
PlantID      varchar(8) 
PCODE        varchar(10)    
PARANAME     varchar(15)    

Так что я думаю изменить схему таблицы, Может кто-нибудь, пожалуйста, предложите какие-либо входные данные о том, какразработать такую ​​схему?

...