Oracle 11g Заменить физические столбцы виртуальными столбцами - PullRequest
0 голосов
/ 02 сентября 2018

После того, как я в течение некоторого времени гуглил, я выкладываю этот вопрос здесь, так как я не смог найти нигде такую ​​проблему.

В нашем приложении есть таблица с 274 столбцами (без столбцов LOB или Long Raw), и в течение 8 лет таблица начала иметь цепочки строк, поэтому любое полное сканирование таблицы влияет на производительность.

Когда мы копаем глубже, мы обнаружили, что примерно 50 столбцов нигде в приложении не используются и поэтому могут быть удалены сразу. Но проблема здесь заключается в том, что для достижения этой цели приложение должно претерпеть множество изменений в коде, и мы представили базовые данные как сервис, который используется и другими приложениями. Поэтому мы не можем сейчас выбрать изменение кода в качестве опции.

Другой вариант, который, как мы думали, заключался в том, что если я смогу сделать эти 50 столбцов в качестве виртуального столбца всегда равными NULL, тогда нам нужно только внести изменения в процедуры загрузки таблиц, а все остальное будет как есть. Но мне нужен совет экспертов, не добавит ли виртуальные столбцы в таблицу повторное построение цепочек строк. Будет ли это решение работать для данной постановки задачи?

Спасибо Rammy

1 Ответ

0 голосов
/ 02 сентября 2018

Oracle допускает только 255 столбцов на блок. Для таблиц с более чем 255 столбцами он разбивает строки на несколько блоков. Узнать больше .

В вашей таблице 274 столбца, поэтому вы связали строки в ряд из-за внутренней структуры таблицы, а не из-за места, занимаемого данными. Если сделать пятьдесят столбцов пустыми, это не изменится.

Итак, если вы хотите удалить цепочки строк, вам действительно нужно отбросить строки. Конечно, вы не хотите изменять весь этот код приложения. Так что вы можете попробовать это:

  • переименовать таблицу
  • отбросьте столбцы, которые вам больше не нужны
  • создать представление с использованием исходного имени таблицы и включить в проекцию представления столбцы NULL, чтобы соответствовать исходной структуре таблицы.
...