2013-03-02 2 views
0

Это просто быстрый вопрос, но при выполнении процедуры обновления для таблицы говорят Personinfo, например, это приемлемоMYSQL IFNULL правильное использование

Update Person 
Set 
    FirstName = IFNULL(_FirstName, FirstName), 
    LastName = IFNULL(_LastName, LastName) 
    Where PID = _PID 

ли это вообще желательно, чтобы делать частичные обновления для записи или должны вся информация просто отправляется обратно?

+0

Ваш ответ выглядит хорошо для меня - кроме удаления последней запятой перед предложением WHERE. Предположим, вы проходите в _FirstName и его можно передать как значение NULL. – sgeddes

+0

Заинтересовалось, разрешено ли это разрешить или если IFNULL() может не стоить возвращать nulls из-за его производительности, о которой я не могу много узнать. – SCFi

ответ

0

IFNULL вернет exp2, если exp1 не равен нулю.

Я предполагаю, что вы хотите вернуть фиксированную строку «Имя» и «Фамилия», если параметр, который вы передали хранимой процедуре, не установлен. Я рассчитываю на производительность, вы также говорите в связи со скоростью обновления/выбора и фрагментации данных.

Вы должны спросить себя, по какой причине вы хотите использовать NULL или фиксированную строку, а не беспокоиться о производительности (если у вас уже нет проблемы с производительностью, связанной с этим).

Это правда, что это может повлиять на производительность, но оно должно только вызывать проблемы, если размер строки превышает предел - внутреннее представление таблицы имеет максимальный размер строки 65 535 байт. Если вы не собираетесь превышать это, то разница в производительности между фиксированной строкой и NULL не стоит задумываться.

Вы также можете выбрать тип CHAR, поскольку он всегда будет иметь одинаковую длину и никогда не приведет к фрагментации. Но тогда вы должны сохранить пустое значение, а не NULL.

+0

Это будет вам большое спасибо за ваши отзывы – SCFi

Смежные вопросы