IFNULL вернет exp2, если exp1 не равен нулю.
Я предполагаю, что вы хотите вернуть фиксированную строку «Имя» и «Фамилия», если параметр, который вы передали хранимой процедуре, не установлен. Я рассчитываю на производительность, вы также говорите в связи со скоростью обновления/выбора и фрагментации данных.
Вы должны спросить себя, по какой причине вы хотите использовать NULL или фиксированную строку, а не беспокоиться о производительности (если у вас уже нет проблемы с производительностью, связанной с этим).
Это правда, что это может повлиять на производительность, но оно должно только вызывать проблемы, если размер строки превышает предел - внутреннее представление таблицы имеет максимальный размер строки 65 535 байт. Если вы не собираетесь превышать это, то разница в производительности между фиксированной строкой и NULL не стоит задумываться.
Вы также можете выбрать тип CHAR, поскольку он всегда будет иметь одинаковую длину и никогда не приведет к фрагментации. Но тогда вы должны сохранить пустое значение, а не NULL.
Ваш ответ выглядит хорошо для меня - кроме удаления последней запятой перед предложением WHERE. Предположим, вы проходите в _FirstName и его можно передать как значение NULL. – sgeddes
Заинтересовалось, разрешено ли это разрешить или если IFNULL() может не стоить возвращать nulls из-за его производительности, о которой я не могу много узнать. – SCFi