У меня есть требование иметь 612 столбцов в моей таблице базы данных. Количество столбцов в соответствии с типом данных:
BigInt — 150 (PositionCol1, PositionCol2…………PositionCol150)
Инт - 5
Маленькое целое – 5
Дата — 150 (SourceDateCol1, SourceDate2,………….SourceDate150)
ДатаВремя – 2
Varchar(2000) – 150 (FormulaCol1, FormulaCol2………………FormulaCol150)
Бит — 150 (IsActive1, IsActive2,……………….IsActive150)
Когда пользователь выполняет импорт в первый раз, данные сохраняются в PositionCol1, SourceDateCol1, FormulaCol1, IsActiveCol1 и т. д. (другие столбцы datetime, Int, Smallint).
Когда пользователь выполняет импорт во второй раз, данные сохраняются в PositionCol2, SourceDateCol2, FormulaCol2, IsActiveCol2 и т. д. (другие столбцы datetime, Int, Smallint)… .. и т. д.
В таблице есть столбец ProjectID, для которого импортируются данные.
Перед началом процесса импорта пользователь сопоставляет имена столбцов Excel с именами столбцов базы данных (PositionCol1, SourceDateCol1, FormulaCol1, IsActiveCol1), и это сопоставление сохраняется в отдельной таблице; чтобы при извлечении данных можно было отображать эти имена столбцов сопоставления вместо имен столбцов БД. Например.
PositionCol1 может быть сопоставлен с SAPDATA
SourceDateCol1 может быть сопоставлен с SAPDATE
FormulaCol1 может быть сопоставлен с SAPFORMULA
IsActiveCol1 может быть сопоставлен с SAPISACTIVE
40 000 строк будут добавляться в эту таблицу каждый день, мой вопрос заключается в том, сможет ли SQL обрабатывать такое количество данных в долгосрочной перспективе?
В большинстве случаев строка будет содержать данные примерно в 200-300 столбцах; в худшем случае у него будут данные во всех 612 столбцах. Имея это в виду, должен ли я внести некоторые изменения в дизайн, чтобы избежать проблем с производительностью в будущем? Если да, то подскажите, что можно сделать?
Если я буду придерживаться своего текущего дизайна, о каких моментах я должен позаботиться, помимо индексации, чтобы иметь оптимальную производительность при извлечении данных из этой огромной таблицы?
Если мне нужно получить данные определенного объекта, например. SAPDATA, мне нужно перейти к моей таблице сопоставления, получить имя столбца базы данных по SAPDATA, т. е. в данном случае PositionCol1; и получить его. Но таким образом мне придется писать динамические запросы. Есть ли другой лучший способ?