|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
Приветствую Есть большая таблица 120 патриций по +- 20М записей в каждой... Есть набор записей id1 - date_field в кол-е 600к-1М которьіе вьібирают из разньіх партиций по +-500 записей схема Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
вещи вроде такого "не возвращаются" Код: sql 1. 2. 3. 4. 5. 6. 7.
возможно самьій лучший план: nested loops index scan cix_random_subset_of_large_table_id1 +index seek cix_large_table_pk вопрос1 - будет ли лучше работать решение с merge join ? вопрос2 - будет ли лучше написать курсор-цикл и "целиться" в 1-у партицию в итериции буду признателен за рекомендации по решению подобньіх задач пс. индекс по my_target_field не предлагать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2020, 04:12 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
1. Минимум Код: sql 1. 2. 3. 4. 5. 6.
2. lt.id1 = rs.id1 значения для точного равенства следует ставить в индексах ПЕРВЫМИ. Код: sql 1. 2. 3. 4. 5. 6.
НО! это надо сделать и в большой таблице. Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2020, 09:12 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
В 1 таблице кластеризованный индекс сначала по дате, потом по id1, во второй таблице - по id1. Во-первых, join лучше делать по условию что T1.id1 = T2.id1, а потом уже другие условия. Во вторых: поскольку в 1 таблице в кластеризованном индексе сортировка в 1 очередь по дате - физически на страницах памяти в базе будет всё упорядочено по дате, а потом уже по id1. Если пересоздать кластеризованный индекс 1 таблицы так, чтобы упорядочить в 1 очередь по id1 - то можно будет сделать merge join - он должен быстрее всего работать. Ещё рекомендую посмотреть, как сделать чтобы записи джоинились только в рамках своей партиции - рекомендую во второй таблице на этот случай завести ключ к партиции из первой таблицы и в первую очередь джоиниться по нему, а уже во вторую - по индексу. Конечно при условии, что у вас индекс тоже партиционированный. При этом условие по партиции должно быть строго равно, без всяких больше или равно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 19:50 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
Александр Бердышев и в первую очередь джоиниться по нему, а уже во вторую - по индексу. т.е. Код: sql 1.
хуже чем Код: sql 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 20:04 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
_human, Попробуйте так Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 20:41 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
Всем спасибо Задача бьіла решена путем уменьшения обьема данньіх. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 07:32 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
Однако есть другая немного схема Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181.
Код: plaintext 1. 2. 3. 4. 5.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 08:04 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
в большой таблице ничго менять нельзя индексьі на dbo.sub_set можно создавать в реальности большая таблица огромна секционирование, в отличии от семпла на большой таблице сделано правильно - файловьіе группьі размер секций 10-20М записей кол-во секций больше Все решения не удовлетворяют по скорости на реальньіх данньіх На реальньіх данньіх решение #1 использует seek по ix_large_table_sub_id давая наилучший результат. Решения с курсорами/циклами не возвращаются Посоветуйте) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 08:16 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 08:48 |
|
Запрос к большой таблице
|
|||
---|---|---|---|
#18+
aleks222, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
#1 exec plan RowsExecutesStmtTextStmtIdNodeIdParentPhysicalOpLogicalOpArgumentDefinedValuesEstimateRowsEstimateIOEstimateCPUAvgRowSizeTotalSubtreeCostOutputListWarningsTypeParallelEstimateExecutions1809291"select lt.target_field from dbo.large_table as lt join dbo.sub_set as ss on lt.sub_id = ss.sub_id"110NULLNULLNULLNULL222101.8NULLNULLNULL145.6149NULLNULLSELECT0NULL00" |--Compute Scalar(DEFINE:([lt].[target_field]='bingo'))"121Compute ScalarCompute ScalarDEFINE:([lt].[target_field]='bingo')[lt].[target_field]='bingo'222101.800.0222101813145.6149[lt].[target_field]NULLPLAN_ROW011809291" |--Parallelism(Gather Streams)"132ParallelismGather StreamsNULLNULL222101.800.16759139145.5927NULLNULLPLAN_ROW111809294" |--Hash Match(Inner Join HASH:([ss].[sub_id])=([lt].[sub_id]) RESIDUAL:([tempdb].[dbo].[sub_set].[sub_id] as [ss].[sub_id]=[tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id]))"143Hash MatchInner Join"HASH:([ss].[sub_id])=([lt].[sub_id]) RESIDUAL:([tempdb].[dbo].[sub_set].[sub_id] as [ss].[sub_id]=[tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id])"NULL222101.8059.413559145.4251NULLNULLPLAN_ROW11396244" |--Bitmap(HASH:([ss].[sub_id]) DEFINE:([Bitmap1004]))"154BitmapBitmap CreateHASH:([ss].[sub_id])[Bitmap1004]3962400.08536539150.1896214[ss].[sub_id]NULLPLAN_ROW11396244" | |--Parallelism(Repartition Streams Hash Partitioning PARTITION COLUMNS:([ss].[sub_id]))"165ParallelismRepartition StreamsPARTITION COLUMNS:([ss].[sub_id])NULL3962400.08536539150.1896214[ss].[sub_id]NULLPLAN_ROW11396244" | |--Index Scan(OBJECT:([tempdb].[dbo].[sub_set].[ix_sub_set_sub_id] AS [ss]))"176Index ScanIndex ScanOBJECT:([tempdb].[dbo].[sub_set].[ix_sub_set_sub_id] AS [ss])[ss].[sub_id]396240.082384260.0218717150.104256[ss].[sub_id]NULLPLAN_ROW112714454" |--Parallelism(Repartition Streams Hash Partitioning PARTITION COLUMNS:([lt].[sub_id]))"184ParallelismRepartition StreamsPARTITION COLUMNS:([lt].[sub_id])NULL1.800066E+07025.86171585.82195[lt].[sub_id]NULLPLAN_ROW112714454" |--Index Scan(OBJECT:([tempdb].[dbo].[large_table].[ix_large_table_sub_id] AS [lt]) WHERE:(PROBE([Bitmap1004][tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id]N'[IN ROW]')))"198Index ScanIndex Scan"OBJECT:([tempdb].[dbo].[large_table].[ix_large_table_sub_id] AS [lt]) WHERE:(PROBE([Bitmap1004][tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id]N'[IN ROW]'))"[lt].[sub_id]1.800066E+0750.031559.9287021559.96025[lt].[sub_id]NULLPLAN_ROW11 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
#4 exec plan RowsExecutesStmtTextStmtIdNodeIdParentPhysicalOpLogicalOpArgumentDefinedValuesEstimateRowsEstimateIOEstimateCPUAvgRowSizeTotalSubtreeCostOutputListWarningsTypeParallelEstimateExecutions1806851"select lt.target_field from dbo.large_table as lt join dbo.sub_set_unq as ss on lt.sub_id = ss.sub_id"110NULLNULLNULLNULL221950.4NULLNULLNULL145.5966NULLNULLSELECT0NULL00" |--Compute Scalar(DEFINE:([lt].[target_field]='bingo'))"121Compute ScalarCompute ScalarDEFINE:([lt].[target_field]='bingo')[lt].[target_field]='bingo'221950.400.0221950413145.5966[lt].[target_field]NULLPLAN_ROW011806851" |--Parallelism(Gather Streams)"132ParallelismGather StreamsNULLNULL221950.400.16749649145.5744NULLNULLPLAN_ROW111806854" |--Hash Match(Inner Join HASH:([ss].[sub_id])=([lt].[sub_id]) RESIDUAL:([tempdb].[dbo].[sub_set_unq].[sub_id] as [ss].[sub_id]=[tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id]))"143Hash MatchInner Join"HASH:([ss].[sub_id])=([lt].[sub_id]) RESIDUAL:([tempdb].[dbo].[sub_set_unq].[sub_id] as [ss].[sub_id]=[tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id])"NULL221950.4059.413169145.4069NULLNULLPLAN_ROW11395974" |--Bitmap(HASH:([ss].[sub_id]) DEFINE:([Bitmap1004]))"154BitmapBitmap CreateHASH:([ss].[sub_id])[Bitmap1004]3959700.08532664150.1718292[ss].[sub_id]NULLPLAN_ROW11395974" | |--Parallelism(Repartition Streams Hash Partitioning PARTITION COLUMNS:([ss].[sub_id]))"165ParallelismRepartition StreamsPARTITION COLUMNS:([ss].[sub_id])NULL3959700.08532664150.1718292[ss].[sub_id]NULLPLAN_ROW11395974" | |--Table Scan(OBJECT:([tempdb].[dbo].[sub_set_unq] AS [ss]))"176Table ScanTable ScanOBJECT:([tempdb].[dbo].[sub_set_unq] AS [ss])[ss].[sub_id]395970.064684980.0218176150.08650258[ss].[sub_id]NULLPLAN_ROW112714454" |--Parallelism(Repartition Streams Hash Partitioning PARTITION COLUMNS:([lt].[sub_id]))"184ParallelismRepartition StreamsPARTITION COLUMNS:([lt].[sub_id])NULL1.800066E+07025.86171585.82195[lt].[sub_id]NULLPLAN_ROW112714454" |--Index Scan(OBJECT:([tempdb].[dbo].[large_table].[ix_large_table_sub_id] AS [lt]) WHERE:(PROBE([Bitmap1004][tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id]N'[IN ROW]')))"198Index ScanIndex Scan"OBJECT:([tempdb].[dbo].[large_table].[ix_large_table_sub_id] AS [lt]) WHERE:(PROBE([Bitmap1004][tempdb].[dbo].[large_table].[sub_id] as [lt].[sub_id]N'[IN ROW]'))"[lt].[sub_id]1.800066E+0750.031559.9287021559.96025[lt].[sub_id]NULLPLAN_ROW11 Наглядного резульатата на сампле нет, но вполне может бьіть на большших данньіх Скоро проверю ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 17:59 |
|
|
start [/forum/topic.php?fid=46&msg=39925975&tid=1686303]: |
0ms |
get settings: |
11ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 446ms |
0 / 0 |