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

От версии 5.1
отредактировано Alexandr Fokin
на 2020/03/25 11:53
Изменить комментарий: К данной версии нет комментариев
К версии 20.1
отредактировано Alexandr Fokin
на 2020/03/28 22:44
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -9,33 +9,168 @@
9 9  1) Использование оператора IN, в параметрах у которого перечислены все значения из List1.
10 10  2) Созданием временной таблицы в рамках запроса, наполнение таблицы значениями из List1, выполнить join между временной таблицой и Таблица1
11 11  (!При этом одна операция INSERT может вставить не более 1000 строк и если элементов больше, то потребуется несколько операций)
12 +Реализация происходит в рамках sql запросов ado.net, без хранимых процедур. Время, затрачиваемое на построение текста запроса, не учитывается.
13 +3) Использование xml переменной, данные из которой используются для операции join с Таблица1.
12 12  
13 13  {{html}}
14 14  <table style="height: 179px; width: 620px;">
15 15  <tbody>
16 -<tr>
17 -<td>Кол-во записей с в Таблица1</td>
18 -<td>Кол-во элементов в List1</td>
19 -<td>№</td>
20 -<td>Время выполнения (мс)</td>
21 -</tr>
22 -<tr>
23 -<td>20000</td>
24 -<td>1000</td>
25 -<td>1</td>
26 -<td>3887</td>
27 -</tr>
28 -<tr>
29 -<td>&nbsp;</td>
30 -<td>&nbsp;</td>
31 -<td>2</td>
32 -<td>63</td>
33 -</tr>
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>15</td>
99 + <td>50</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 +
119 + <tr>
120 + <td>&nbsp;</td>
121 + <td>1000</td>
122 + <td>1000</td>
123 + <td>1</td>
124 + <td>112</td>
125 + </tr>
126 + <tr>
127 + <td>&nbsp;</td>
128 + <td>&nbsp;</td>
129 + <td>&nbsp;</td>
130 + <td>2</td>
131 + <td>70</td>
132 + </tr>
133 + <tr>
134 + <td>&nbsp;</td>
135 + <td>&nbsp;</td>
136 + <td>&nbsp;</td>
137 + <td>3</td>
138 + <td>30</td>
139 + </tr>
140 +
141 +
142 + <tr>
143 + <td>&nbsp;</td>
144 + <td>1000</td>
145 + <td>1000</td>
146 + <td>1</td>
147 + <td>112</td>
148 + </tr>
149 + <tr>
150 + <td>&nbsp;</td>
151 + <td>&nbsp;</td>
152 + <td>&nbsp;</td>
153 + <td>2</td>
154 + <td>70</td>
155 + </tr>
156 + <tr>
157 + <td>&nbsp;</td>
158 + <td>&nbsp;</td>
159 + <td>&nbsp;</td>
160 + <td>3</td>
161 + <td>30</td>
162 + </tr>
163 +
34 34  </tbody>
35 35  </table>
36 36  {{/html}}
37 37  
168 +Выводы
169 +При малом размере списка List1 < 100, имеет IN выдает более быстреый результат.
170 +При большем размере join показывает себя лучше
171 +
38 38  Ссылки:
39 39  https://metanit.com/sql/sqlserver/10.4.php
40 40  https://metanit.com/sql/sqlserver/10.3.php
41 41  https://info-comp.ru/programmirovanie/567-table-variables-in-ms-sql-server.html
176 +https://www.cyberforum.ru/ado-net/thread1948686.html
XWiki.XWikiComments[0]
Комментарий
... ... @@ -1,9 +1,12 @@
1 1  1)
2 +{{code language="sql"}}
2 2  select *
3 3  from dbo.MainEntities
4 4  where I in (1000,1001,1002 ...)
6 +{{/code}}
5 5  
6 6  2)
9 +{{code language="sql"}}
7 7  DROP TABLE IF EXISTS #TmpData
8 8  
9 9  CREATE TABLE #TmpData
... ... @@ -20,3 +20,19 @@
20 20  JOIN dbo.MainEntities me on td.ID = me.I
21 21  
22 22  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}}