с текстовыми полями, надо искать совпадения этих полей между собой. таблицы постоянно увеличиваются, строк там потенциально миллиарды.
есть два вопроса:
1. поиск планирую делать через where, может есть что-то лучшее для поиска дубликатов?
2. есть ли смысл вводить доп поле, по которому делать prewhere? например последний индекс поля второй таблицы, либо же это излишне, т.к. два where все равно будут бегать по всем строкам?
вы не очень понятно описали задачу, можно понять неправильно. вобще-то строгое совпадения двух полей (даже текстовых) в разных таблицах решается через join, для которого существуют разные оптимизации. Но если дубликаты - это это строки в одной таблице - это иная задача. И в любом случае - полный проход по миллиардным таблицам - это всегда плохо, надо как-то избегать такого - например делать обратные индексы (скажем на основе MV/projectons), или как тут недавно обсуждалось - битмапами.
да, надо искать строгое совпадение двух полей в разных таблицах. join как раз подойдет. но как он себя поведет на миллиардных таблицах? проверка по сути нужна не очень часто, примерно раз в неделю и длительность выполнения не очень критична в разумных пределах...
при джойне правая таблица помещается в память. если памяти не хватит, тогда всё, приплыли
Так вроде merge join завезли
круть. и как оно? работает сильно медленнее?
А я хз, я давно не пользуюсь кх, тока чатик читаю
ну так.... SELECT formatReadableQuantity(count()) FROM calls │ 1.53 billion │ SET join_algorithm = 'partial_merge' SELECT count() FROM calls AS c1 INNER JOIN calls AS c2 ON c1.client = c2.companyTelnum ↓ Progress: 2.28 billion rows, 18.27 GB (404.36 thousand rows/s., 3.23 MB/s.) │ 2590808638539 │ 1 rows in set. Elapsed: 10954.815 sec. Processed 3.06 billion rows, 24.50 GB (279.57 thousand rows/s., 2.24 MB/s.) Два с половиной часа. Сервер какой-то более-менее приличный, поля не в индексе и взяты от балды. Зато работает без каких-то особых усилий. Если раз в неделю на ночь, то пойдет. А если ещё немного подумать над оптимизацией, то и подавно. Так что можно джойнить миллиарды.
Обсуждают сегодня