Вариант использования : я собираюсь использовать SQL Сервер для извлечения значений из большой таблицы (более 1 000 000 строк), где в качестве критериев фильтрации может использоваться много разных столбцов, некоторые чаще используются, чем другие.
Вопросы
Было бы быстрее использовать короткое замыкание в предложении WHERE
, чтобы было меньше сравнений?
Следует ли сначала отфильтровать наиболее часто используемые критерии, чтобы сделать еще меньше сравнений?
Следует ли индексировать наиболее часто используемые критерии?
Пример
SELECT value
FROM AssignmentTable
WHERE (criteriaOne = <criteriaOneValue> OR criteriaOne IS NULL)
AND (criteriaTwo = <criteriaTwoValue> OR criteriaTwo IS NULL)
AND (criteriaThree = <criteriaThreeValue> OR criteriaThree IS NULL)
AND ... for all criteria (roughly 15)
SELECT value
FROM AssignmentTable
WHERE 1 =
CASE
WHEN (criteriaOne = <criteriaOneValue> OR criteriaOne IS NULL) THEN
CASE
WHEN (criteriaTwo = <criteriaTwoValue> OR criteriaTwo IS NULL) THEN
CASE
WHEN (criteriaThree = <criteriaThreeValue> OR criteriaThree IS NULL) THEN 1
ELSE 0
END
ELSE 0
END
ELSE 0
END