Редактировал(а) Alexandr Fokin 2023/12/16 14:13

От версии 16.1
отредактировано Alexandr Fokin
на 2020/03/28 22:30
Изменить комментарий: К данной версии нет комментариев
К версии 2.1
отредактировано Alexandr Fokin
на 2020/03/25 11:46
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -1,7 +1,7 @@
1 1  
2 2  **Задача:**
3 -Имеется таблица с записями Таблица1 (При этом размеры таблицы не малы)
4 -Имеется список ключей List1 (Кол-во элементов в списке превышает 500)
3 +Имеется таблица с записями Таблица1
4 +Имеется список ключей List1
5 5  
6 6  Необходимо отобрать из Таблица1 значения, у которых поле key попадает в список List1.
7 7  
... ... @@ -8,123 +8,5 @@
8 8  **Варианты реализации:**
9 9  1) Использование оператора IN, в параметрах у которого перечислены все значения из List1.
10 10  2) Созданием временной таблицы в рамках запроса, наполнение таблицы значениями из List1, выполнить join между временной таблицой и Таблица1
11 -(!При этом одна операция INSERT может вставить не более 1000 строк и если элементов больше, то потребуется несколько операций)
12 -Реализация происходит в рамках sql запросов ado.net, без хранимых процедур. Время, затрачиваемое на построение текста запроса, не учитывается.
13 -3) Использование xml переменной, данные из которой используются для операции join с Таблица1.
14 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>&nbsp;</td>
36 - <td>&nbsp;</td>
37 - <td>&nbsp;</td>
38 - <td>2</td>
39 - <td>70</td>
40 - </tr>
41 - <tr>
42 - <td>&nbsp;</td>
43 - <td>&nbsp;</td>
44 - <td>&nbsp;</td>
45 - <td>3</td>
46 - <td>34</td>
47 - </tr>
48 -
49 -
50 - <tr>
51 - <td>&nbsp;</td>
52 - <td>2000</td>
53 - <td>50</td>
54 - <td>1</td>
55 - <td>202</td>
56 - </tr>
57 - <tr>
58 - <td>&nbsp;</td>
59 - <td>&nbsp;</td>
60 - <td>&nbsp;</td>
61 - <td>2</td>
62 - <td>126</td>
63 - </tr>
64 - <tr>
65 - <td>&nbsp;</td>
66 - <td>&nbsp;</td>
67 - <td>&nbsp;</td>
68 - <td>3</td>
69 - <td>60</td>
70 - </tr>
71 -
72 -
73 - <tr>
74 - <td>&nbsp;</td>
75 - <td>4000</td>
76 - <td>50</td>
77 - <td>1</td>
78 - <td>423</td>
79 - </tr>
80 - <tr>
81 - <td>&nbsp;</td>
82 - <td>&nbsp;</td>
83 - <td>&nbsp;</td>
84 - <td>2</td>
85 - <td>247</td>
86 - </tr>
87 - <tr>
88 - <td>&nbsp;</td>
89 - <td>&nbsp;</td>
90 - <td>&nbsp;</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>&nbsp;</td>
105 - <td>&nbsp;</td>
106 - <td>&nbsp;</td>
107 - <td>2</td>
108 - <td>15</td>
109 - </tr>
110 - <tr>
111 - <td>&nbsp;</td>
112 - <td>&nbsp;</td>
113 - <td>&nbsp;</td>
114 - <td>3</td>
115 - <td>19</td>
116 - </tr>
117 -
118 -</tbody>
119 -</table>
120 -{{/html}}
121 121  
122 -Выводы
123 -При малом размере списка List1 < 100(500), имеет 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,1 +1,0 @@
1 -XWiki.cccc1808
Комментарий
... ... @@ -1,41 +1,0 @@
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,1 +1,0 @@
1 -2020-03-25 11:50:46.920