Изменения документа Поиск в таблице по списку ключей
Редактировал(а) Alexandr Fokin 2023/12/16 14:13
От версии 1.2
отредактировано Alexandr Fokin
на 2020/03/25 11:41
на 2020/03/25 11:41
Изменить комментарий:
Добавлен тег [sql,Тестирование]
К версии 17.1
отредактировано Alexandr Fokin
на 2020/03/28 22:36
на 2020/03/28 22:36
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
-
Объекты (0 изменено, 1 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,0 +1,130 @@ 1 + 2 +**Задача:** 3 +Имеется таблица с записями Таблица1 (При этом размеры таблицы не малы) 4 +Имеется список ключей List1 (Кол-во элементов в списке превышает 500) 5 + 6 +Необходимо отобрать из Таблица1 значения, у которых поле key попадает в список List1. 7 + 8 +**Варианты реализации:** 9 +1) Использование оператора IN, в параметрах у которого перечислены все значения из List1. 10 +2) Созданием временной таблицы в рамках запроса, наполнение таблицы значениями из List1, выполнить join между временной таблицой и Таблица1 11 +(!При этом одна операция INSERT может вставить не более 1000 строк и если элементов больше, то потребуется несколько операций) 12 +Реализация происходит в рамках sql запросов ado.net, без хранимых процедур. Время, затрачиваемое на построение текста запроса, не учитывается. 13 +3) Использование xml переменной, данные из которой используются для операции join с Таблица1. 14 + 15 +{{html}} 16 +<table style="height: 179px; width: 620px;"> 17 +<tbody> 18 + <tr> 19 + <td>Кол-во записей с в Таблица1</td> 20 + <td>Кол-во элементов в List1</td> 21 + <td>Кол-во запусков</td> 22 + <td>№</td> 23 + <td>Среднее время выполнения (мс)</td> 24 + 25 + 26 + </tr> 27 + <tr> 28 + <td>20000</td> 29 + <td>1000</td> 30 + <td>50</td> 31 + <td>1</td> 32 + <td>97</td> 33 + </tr> 34 + <tr> 35 + <td> </td> 36 + <td> </td> 37 + <td> </td> 38 + <td>2</td> 39 + <td>70</td> 40 + </tr> 41 + <tr> 42 + <td> </td> 43 + <td> </td> 44 + <td> </td> 45 + <td>3</td> 46 + <td>34</td> 47 + </tr> 48 + 49 + 50 + <tr> 51 + <td> </td> 52 + <td>2000</td> 53 + <td>50</td> 54 + <td>1</td> 55 + <td>202</td> 56 + </tr> 57 + <tr> 58 + <td> </td> 59 + <td> </td> 60 + <td> </td> 61 + <td>2</td> 62 + <td>126</td> 63 + </tr> 64 + <tr> 65 + <td> </td> 66 + <td> </td> 67 + <td> </td> 68 + <td>3</td> 69 + <td>60</td> 70 + </tr> 71 + 72 + 73 + <tr> 74 + <td> </td> 75 + <td>4000</td> 76 + <td>50</td> 77 + <td>1</td> 78 + <td>423</td> 79 + </tr> 80 + <tr> 81 + <td> </td> 82 + <td> </td> 83 + <td> </td> 84 + <td>2</td> 85 + <td>247</td> 86 + </tr> 87 + <tr> 88 + <td> </td> 89 + <td> </td> 90 + <td> </td> 91 + <td>3</td> 92 + <td>82</td> 93 + </tr> 94 + 95 + 96 + <tr> 97 + <td>1000000</td> 98 + <td>1000</td> 99 + <td>20</td> 100 + <td>1</td> 101 + <td>12</td> 102 + </tr> 103 + <tr> 104 + <td> </td> 105 + <td> </td> 106 + <td> </td> 107 + <td>2</td> 108 + <td>15</td> 109 + </tr> 110 + <tr> 111 + <td> </td> 112 + <td> </td> 113 + <td> </td> 114 + <td>3</td> 115 + <td>19</td> 116 + </tr> 117 + 118 +</tbody> 119 +</table> 120 +{{/html}} 121 + 122 +Выводы 123 +При малом размере списка List1 < 100, имеет IN выдает более быстреый результат. 124 +При большем размере join показывает себя лучше 125 + 126 +Ссылки: 127 +https://metanit.com/sql/sqlserver/10.4.php 128 +https://metanit.com/sql/sqlserver/10.3.php 129 +https://info-comp.ru/programmirovanie/567-table-variables-in-ms-sql-server.html 130 +https://www.cyberforum.ru/ado-net/thread1948686.html
- XWiki.XWikiComments[0]
-
- Автор
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.cccc1808 - Комментарий
-
... ... @@ -1,0 +1,41 @@ 1 +1) 2 +{{code language="sql"}} 3 +select * 4 +from dbo.MainEntities 5 +where I in (1000,1001,1002 ...) 6 +{{/code}} 7 + 8 +2) 9 +{{code language="sql"}} 10 +DROP TABLE IF EXISTS #TmpData 11 + 12 +CREATE TABLE #TmpData 13 +(ID INT) 14 + 15 + 16 +INSERT INTO #TmpData 17 +VALUES (1000), (1001), (1002), ... 18 + 19 +... 20 + 21 +SELECT * 22 +FROM #TmpData td 23 +JOIN dbo.MainEntities me on td.ID = me.I 24 + 25 +DROP TABLE IF EXISTS #TmpData 26 +{{/code}} 27 + 28 +3) 29 +{{code language="sql"}} 30 +Declare @idList xml = ' 31 +<ArrayOfInt> 32 + <int>1000</int> 33 + <int>1001</int> 34 + ... 35 +</ArrayOfInt>' 36 + 37 +Select 38 + me.* 39 +From @idList.nodes('/ArrayOfInt/int') AS idList(id) 40 + JOIN dbo.MainEntities me on idList.id.value('.', 'int') = me.I 41 +{{/code}} - Дата
-
... ... @@ -1,0 +1,1 @@ 1 +2020-03-25 11:50:46.920