Задать вопрос
Alex_Geer
@Alex_Geer
System Engineer

Нормально ли дублирование строк в IN?

Анализирую долгие запросы в системе. И в запросе вижу что в IN очень много раз передается одна и таже строка. Подскажите нормально ли это или нет?
Вот пример:
IN (
		'91cbfdc8-5d5d-465e-95a4-3235b8c01d5b'
	,	'8fee99ee-b3fd-49dd-9b48-e51b83597227'
	,	'e04a433b-5b48-40c2-993a-41370b9ebb8a'
	,	'd238ef51-607e-46a5-b86a-ede4482f7f19'
	,	'00000000-0000-0000-0000-000000000000'
	,	'00000000-0000-0000-0000-000000000000'
	,	'f44faafc-cd55-4c5b-b16d-93b6fc966ffb'
	,	'00000000-0000-0000-0000-000000000000'
	,	'00000000-0000-0000-0000-000000000000'
	,	'50e39d87-4fc6-4847-8bad-20847b9ba020'
	,	'7cca016a-80f0-4562-9042-57bb748d5b30'
	,	'00000000-0000-0000-0000-000000000000'
	,	'00000000-0000-0000-0000-000000000000'
	,	'e2dd5bf3-54c8-4846-b158-9c42d09fbc33'
	,	'00000000-0000-0000-0000-000000000000'
	,	'00000000-0000-0000-0000-000000000000'
	,	'69ac657a-0e74-46be-acba-f6bbbbd2bc73'
	,	'00000000-0000-0000-0000-000000000000'
	,	'00000000-0000-0000-0000-000000000000'
	,	'018e582e-5b0e-4e4f-af57-be1e0a468efa'
	,	'00000000-0000-0000-0000-000000000000'
	,	'00000000-0000-0000-0000-000000000000')
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 3
@alexalexes
Вообще, в in засовывать некий массив данных, который больше по количеству элементов, чем пальцев на руках, самый неоптимальный вариант из все возможных.
Если у вас, действительно, целый массив данных, который нужно применить в запросе, то лучше создать заготовку для временной таблицы в схеме данных, и перед выполнением туда подгружать то, что пригодится для in или уже как подзапрос перепишите с участием временной таблицы.
Временную таблицу можно проиндексировать, и это во время выполнения запроса будет уже лучше работать, чем in.
PS: В разных СУБД по-разному реализуются временные таблицы. У них есть разный уровень времени жизни данных - в течении сессии подключения пользователя, в течении транзакции... Посмотрите, какой вариант можно взять для Postgres - его и используйте.
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Надо смотреть, как формируется этот список. В целом, это неоптимально - но допустимо.
Ответ написан
@Vitsliputsli

Подскажите нормально ли это или нет?

Смотря какие нормы применяете.
Будет ли СУБД повторно сравнить с каждым дублем? Нет, не будет.
Где лучше отсеивать дубли? С учетом, что СУБД чаще всего узкое место, тем более если приложение работает в нескольких инстансах, то лучше конечно на стороне приложения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы