Я недавно унаследовал некоторый код, который выглядит примерно так.Группируйте только по некоторым столбцам?
SELECT DISTINCT
field1, field2...(600 lines later)... field99
FROM
MillionRowTable
WHERE
EntryDate > @LastWeek
С distinct
, это занимает несколько часов и замки других людей, потому что она использует 100% от центрального процессора. Без четкости это намного быстрее, но у него есть дубликаты.
Однако я отметил, что если поле1 и поле2 совпадают с полем1 и полем2 в другой строке, то я уже знаю, что они дубликаты, и мне не нужно будет проверять какой-либо другой столбец. Есть ли способ группировать только эти 2 столбца, чтобы я мог избежать дубликатов и 4 часа работы?
1. group by field1, 2 и max (другие поля) 2. row_number() over (partiotion by fileld1, 2) .. где rn = 1 –
Итак, вы используете 'DISTINCT' на 600 столбцах? Я полагаю, что большую часть времени тратится на сортировку записей перед применением оператора DISTINCT. Как насчет вставки без 'DISTINCT' в временную таблицу и отсортировать ее там? –
Вы попробовали? Если вы хотите использовать GROUP, то каждый столбец, который не является частью оператора GROUP BY, должен быть агрегирован. В вашем примере это не сработает, потому что вы не можете Агрегировать по полю99, правильно? Или вы хотите найти повторяющиеся строки? – CPMunich