Я переписывание My SQL, чтобы снизить затраты на выполнение и интересно, если есть эффективный способ, чтобы написать ниже случай, когда заявление используется в WHERE условие:Оптимизация случая, когда оператор в SQL Server ИНЕКЕ условие
SELECT l.*,tg.*
FROM RefTable tg,
InputTbl l
WHERE tg.areascheme = l.areascheme
AND tg.countrycode = l.strareabriefnamel1
AND (CASE WHEN l.strareabriefnamel2 IS NULL THEN '' ELSE tg.areacode END) = COALESCE(l.strareabriefnamel2,'')
AND (CASE WHEN l.strareabriefnamel3 IS NULL THEN '' ELSE tg.subareaname END) = COALESCE(l.strareabriefnamel3,'')
AND (CASE WHEN l.strareabriefnamel4 IS NULL THEN '' ELSE tg.postalname END) = COALESCE(l.strareabriefnamel4,'')
option(MAXDOP 0);
План
Подробнее: -
InputTable (466K записей) имеет всего четыре поля, которые участвуют в РЕГИСТРИРУЙТЕСЬ логики и есть в общей сложности 16 возможно (NULL, NOT NULL) со mbinations.
L1, L2, L3, L4
NULL,NULL,NULL,NULL
NULL,NULL,NULL,NOT NULL
NULL,NULL,NOT NULL, NULL
NULL,NULL,NOT NULL,NOT NULL
NULL,NOT NULL,NULL,NULL
NULL,NOT NULL,NULL, NOT NULL
NULL,NOT NULL, NOT NULL,NULL
NULL,NOT NULL,NOT NULL,NOT NULL
NOT NULL,NULL,NULL,NULL
NOT NULL,NULL,NULL,NOT NULL
NOT NULL,NULL,NOT NULL,NULL
NOT NULL,NULL,NOT NULL,NOT NULL
NOT NULL,NOT NULL,NULL,NULL
NOT NULL,NOT NULL,NULL,NOT NULL
NOT NULL,NOT NULL,NOT NULL,NULL
NOT NULL,NOT NULL,NOT NULL,NOT NULL
RefTable (45K записей), которые будут участвовать в соединении логики с InputTable является генерирование результирующего на основе указанных выше критериев производит около 351 млн строк.
Мои входные данные в настоящее время встречают только два сценария.
InputTable: -
NULL,NULL,NULL,NULL - 225776 rows
NOT NULL, NOT NULL, NULL, NULL - 240360 rows
Все входы будут оценены. Благодарю.
Какова проблема производительности, которую вы обнаружили при использовании case-when? Если вы собираетесь проверять только NULL, вы можете очень хорошо использовать coalesce, поскольку вы используете в другом состоянии ... –
значения strareabriefnamel2 могут быть как NULL, так и NOT NULL. Необходимо учитывать оба условия и использовать их в предложении WHERE ... – Teja
Но на основе вашего примера вы можете просто использовать iif ... –