Я изменяю существующий оператор, который объединяет информацию пользователя в одной таблице, чтобы информация пользователя могла поступать из другой таблицы. Одна из них - постоянная таблица, а другая - временная (записи перемещаются из одной в другую). Я изменил свое соединение на левое соединение, а затем левой присоединился к второй контактной информации. Мне нужно выбрать постоянное поле, если оно существует, и временное, если постоянное не существует. 154306 - это идентификатор пользователя всех входящих записей в основной таблице, которую я выбираю. Вот мои 2 варианта для выбора полей:DB2 Performance CASE vs COALESCE
SELECT
CASE WHEN U.USRID = 154306
THEN T.TMPFNAME
ELSE U.FNAME
END AS FNAME,
COALESCE (U.LNAME, T.TMPLNAME) AS LNAME
FROM FILES.ORDERS O
LEFT JOIN FILES.USERS U ON U.USRID <> 154306 AND U.USRID = O.ORDUSR
LEFT JOIN FILES.TMPUSERS T ON O.ORDNUM = T.TMPORD
Я имею в виду случай кажется более «правильный», как это на самом деле управления потоком, но так как сливаются имеет меньше логики, чтобы следовать ей может работать быстрее. Либо должен достигнуть того же результата, потому что 2 левых соединения гарантируют, что мы получим информацию для пользователя, независимо от того, что не получится, но не получите постоянную информацию о пользователе для заказов, которые все еще назначены временному пользователю. Похоже, у нас есть 10 полей для case/coalesce, поэтому я думаю, что метод с лучшей производительностью - это путь, который, я думаю, объединяется, но я даже не уверен в этом. По какой-то причине лучше?
Что произошло, когда вы попробовали? –
Производительность по 1 вызову была тривиальной, это когда она идет в прямом эфире на веб-сайте, что можно проверить нагрузку. – MaKR