Это вопрос теории SQL.Я могу привести пример, но я не думаю, что это необходимо, чтобы высказать свою точку зрения.Любой, кто имеет опыт работы с SQL, сразу поймет, о чем я говорю.
Обычно мы используем объединения, чтобы минимизировать количество записей из-за совпадения левой и правой строк.Однако при определенных условиях объединение таблиц приводит к умножению результатов, когда результатом являются все перестановки левой и правой записей.
У меня есть база данных, в которой имеется 3 или 4 таких объединения.Это превращает то, что будет несколько записей во множество.Меня беспокоит то, что таблицы будут большими в производстве, поэтому количество этих соединенных строк будет огромным.Кроме того, тяжелая математика выполняется в каждом ряду, и идея выполнения математики в дублирующих рядах достаточна, чтобы заставить любого вздрогнуть.
У меня есть два вопроса.Во-первых, это то, о чем я должен заботиться, или SQL Server будет разумно понимать, что все эти строки являются дубликатами, и соответственно оптимизировать всю обработку?
Во-вторых, есть ли преимущество в группировке каждой части запросачтобы получить только отдельные значения, входящие в следующую часть запроса, используя что-то вроде:
WITH t1 AS (
SELECT DISTINCT... [or GROUP BY]
),
t2 AS (
SELECT DISTINCT...
),
t3 AS (
SELECT DISTINCT...
)
SELECT...
Я часто видел применение DISTINCT для подзапросов.Очевидно, есть причина для этого.Тем не менее, я говорю о чем-то немного другом и, возможно, более тонком и хитром.