В настоящее время я сравниваю два набора данных, которые содержат уникальные StoreKey/ProductKey
комбинации.
Первый набор данных имеет уникальные StoreKey/ProductKey
комбинации для продаж между началом января 2012 года и концом мая 2014 года (результат = 450 тыс. Строк). Второй набор данных имеет уникальные StoreKey/ProductKey
комбинации, продажи начинаются с июня 2014 года до сегодняшнего дня (результат = 190 тыс. Строк).
Я ищу, чтобы найти StoreKey/ProductKey
комбинации, которые во 2-м наборе, но не в 1-м наборе - то есть новые продукты, проданные с начала июня.
До сих пор я сбрасывал два набора данных во временные таблицы, создавал индексы для обеих таблиц по обоим ключам и использовал EXCEPT
инструкцию для поиска уникальных элементов.
Каков наиболее эффективный способ сравнения таких больших наборов данных? Есть ли более эффективный способ проведения такого большого сравнения?
источник
TransactionDateKey
, что столбец используется для фильтрации периода времени. В этом случае кластерный индексTransactionDateKey
,StoreKey
иProductKey
является совершенным.Если вы знакомы с алгоритмами (сложность Big-O), лучше всего выполнить это сравнение O (n log (n)). Наиболее эффективный алгоритм сортирует оба набора данных, а затем выполняет объединенный прогон по ним параллельно, чтобы найти совпадающие (или не сопоставленные) ключи. Большинство оптимизаторов RDBMS сделают это автоматически для вас, когда вы используете
EXCEPT
илиMINUS
. Ваш план объяснения подтвердит или не подтвердит. Если вы видите вложенные циклы, вы делаете O (n ^ 2), не так эффективно.источник