Тесты взаимодействия - Поиск в таблице по списку ключей 

Page / - Изменено Alexandr Fokin в 2023/12/16 14:13 

Поиск в таблице по списку ключей 
Изменено Alexandr Fokin
в 2023/12/16 14:13

Оглавление

Задача:
Имеется таблица с записями Таблица1 (При этом размеры таблицы не малы)
Имеется список ключей List1 (Кол-во элементов в списке превышает 500)
Необходимо отобрать из Таблица1 значения, у которых поле key попадает в список List1.
Варианты реализации:
1) Использование оператора IN, в параметрах у которого перечислены все значения из List1.
2) Созданием временной таблицы в рамках запроса, наполнение таблицы значениями из List1, выполнить join между временной таблицой и Таблица1
(!При этом одна операция INSERT может вставить не более 1000 строк и если элементов больше, то потребуется несколько операций)
Реализация происходит в рамках sql запросов ado.net, без хранимых процедур. Время, затрачиваемое на построение текста запроса, не учитывается.
3) Использование xml переменной, данные из которой используются для операции join с Таблица1.
Кол-во записей с в Таблица1	Кол-во элементов в List1	Кол-во запусков	№	Среднее время выполнения (мс)	
20000	1000	50	1	97	
 	 	 	2	70	
 	 	 	3	34	
 	2000	50	1	202	
 	 	 	2	126	
 	 	 	3	60	
 	4000	50	1	423	
 	 	 	2	247	
 	 	 	3	82	
1000000	15	50	1	12	
 	 	 	2	15	
 	 	 	3	19	
 	1000	50	1	112	
 	 	 	2	70	
 	 	 	3	30	
 	4000	50	1	530	
 	 	 	2	328	
 	 	 	3	71	
Выводы
При малом размере списка List1 < 100, имеет IN выдает более быстреый результат.
При большем размере join показывает себя лучше
Ссылки:
https://metanit.com/sql/sqlserver/10.4.php
https://metanit.com/sql/sqlserver/10.3.php
https://info-comp.ru/programmirovanie/567-table-variables-in-ms-sql-server.html
https://www.cyberforum.ru/ado-net/thread1948686.html