Разница в синтаксисе в таблице изменить / добавить с и без NULL - PullRequest
0 голосов
/ 19 августа 2010

У меня есть вопрос, но позвольте мне сначала сказать, что это выполняется в базе данных, которую я унаследовал, и в настоящее время я пытаюсь улучшить дизайн. Также причиной синтаксиса является тот факт, что существует множество таблиц, в которых типы данных были «подправлены» специалистами службы технической поддержки (/ facepalm), что вызывает множество проблем.

IF NOT EXISTS(Select * 
                FROM INFORMATION_SCHEMA.COLUMNS 
               WHERE TABLE_NAME = N'RXINFO' 
                 AND TABLE_SCHEMA = N'scriptassist' 
                 AND COLUMN_NAME = N'Price')
BEGIN

  Alter Table [scriptassist].[RXINFO] Add [Price] FLOAT
  Print 'Price Field  nonexistant creating this field'

END
ELSE
BEGIN
  If Not Exists(Select * 
                  From Information_Schema.Columns 
                 Where Table_Name = N'RXINFO' 
                   And Table_Schema = N'scriptassist' 
                   And Column_Name = N'Price'
                   And DATA_Type = N'FLOAT' 
                   AND IsNull(CHARACTER_MAXIMUM_LENGTH, 0) = 0)
  BEGIN

    Alter Table [scriptassist].[RXINFO] Alter Column Price FLOAT
    Print 'Price Field  needed type updating'

  END
END

Это то, что я сейчас делаю, чтобы определить, нужно ли изменить или добавить столбец в базу данных. Однако даже в случае необходимости добавления, скажем, 3-4 столбцов в линейную базу данных 500K-750K, где таблица имеет ширину около 100 столбцов, я предполагаю, что для каждого столбца требуется от 15 до 20 минут *. 1004 *

То, что я сделал, чтобы попытаться ускорить его:

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

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

1 Ответ

0 голосов
/ 19 августа 2010

Если вы укажете «NULL» или, возможно, «NOT NULL WITH DEFAULT 0.0», будет обновлена ​​только схема, и строки в таблице не будут изменены, поэтому изменение будет для каждой таблицы менее секунды.

Если столбец имеет значение NULL, его не требуется, поэтому нет необходимости обновлять строки при изменении схемы .

Если столбец не имеет значения NULL без значения по умолчанию, то при изменении ALTER для схемы добавления столбца каждая строка в существующей таблице будет обновлена ​​для добавления столбца со значением по умолчанию по умолчанию 0,0. Вот почему ваши изменения занимают минуты.

Если вы укажете «NOT NULL WITH DEFAULT», то «DEFAULT» будет добавлено, когда строка будет прочитана, поэтому снова нет необходимости обновлять строки таблицы.

В обоих случаях текущий SQL INSERT / UPDATE будет работать без каких-либо изменений. Если вы добавите столбец «NOT NULL» без значения по умолчанию, то текущие обновления SQL будут бомбить, если вы не добавите их в столбец цены. Это может быть хорошо или плохо в зависимости от того, чего вы хотите достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...