|
|
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
Возникла следующая ситуация: Джойнятся 2 временные таблицы, результат сохраняется в 3-ей временной таблице. В каждой таблице примерно по 30000 записей и по 60 полей. Объединение идет по полю, которое в одной таблице является примари кеем, а в другой кластерным индексом. Проблема в том, что эта операция выполняется около полутора часов! В чем может быть проблема и как её устранить? Вот примерный код: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2009, 19:40 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
_vita_#Table1.IdKey = #Table2.Table1_Ref Возможно, проблема из-за того, что эти поля разных типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2009, 16:14 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
вообще, лучше увидеть план, и статьстику по I/O. Код: plaintext 1. 2. 3. да и "insert into" лучше заминить на "select into". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2009, 22:22 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
Dim2000_vita_#Table1.IdKey = #Table2.Table1_Ref Возможно, проблема из-за того, что эти поля разных типов. Не думаю, что приведение типа numeric в int так долго работает cherrex_Denвообще, лучше увидеть план, и статьстику по I/O. Код: plaintext 1. 2. 3. да и "insert into" лучше заминить на "select into". insert into заменить на select into не получится, поскольку все происходит внутри транзакции. И ASE не позволяет создавать в транзакции таблицы. Статистику io получить пока не получилось, так как данные формируются динамически и вручную набрать 30000 строк проблематично. Вот план запроса: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 09:08 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
авторFROM TABLE #Table2 Nested iteration. Using Clustered Index. Index : #idx_Table2 Forward scan. Positioning at start of table . похоже из-за приведения типов в джойне у выс сканируется весь индекс, а так как он кластерный то это равносильно "Table Scan". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 09:21 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
Не "кажется сканируется таблица", а именно так и есть. В общем, JOIN идёт без использования индекса. > CREATE TABLE #Table1( > IdKey numeric(*9*,*0*) identity, > create table #Table2 > ( > Table1_Ref int NOT NULL, Сделайте эти поля одинаковыми по типу данных (numeric(9,0) ). Вам всё равно, а серверу работать легче. > insert into #Table3 (F1Code1,F1Code2,...) > select F1Code1,F1Code2,... > from #Table1 join #Table2 (index #idx_Table2) on #Table1.IdKey = #Table2.Table1_Ref Ну и, если первое не поможет, уберите хинт (index #idx_Table2) И, если будут проблемы, запросы сюда, обязательно вместе с планами. И не выкидывайте куски из запросов, как вы сделали в первом посте. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 09:48 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
Похоже что проблема действительно была в типе. После замены типа на numeric(9,0) план вывелся такой: Код: plaintext 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. Интересно, что если убрать хинт (index #idx_Table2), то автоматически он не подставляется и используется Table Scan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 11:40 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
_vita_ пишет: > Интересно, что если убрать хинт (index #idx_Table2), то автоматически он > не подставляется и используется Table Scan. Ну так попробуй ! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 11:43 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
можно попробывать(не меняя структуру таблиц) так: from #Table1 join #Table2 (index #idx_Table2) on convert(int, #Table1.IdKey) = #Table2.Table1_Ref ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 12:13 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
Провел тест на среднем объеме данных. 1800 записей обработалось за 14 минут. Результат не впечатляет. Может что-то еще в плане не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 16:12 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
_vita_Провел тест на среднем объеме данных. 1800 записей обработалось за 14 минут. Результат не впечатляет. Может что-то еще в плане не так? в плане - сканы Index Scan (#Table2, idx_Table2) - не плохо, но и не отлично table scan (#Table1) - плохо протестируйте скорость работы вашей tempdb - в цикле залейте несколько раз сопоставимое кол-во записей во временную таблицу, посмотрите время sp_helpdb tempdb что выдает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 16:33 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
_vita_ пишет: > Может что-то еще в плане не так? Так где планы -то ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 16:52 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
Вот результат sp_helpdb tempdb: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Копирование в tempdb 30000 записей в цикле происходит за меньше секунды. Повторяю план: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 17:27 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
прикольный у вас такой master.dat если не секрет, то покажите Код: plaintext далее, в таблице #table1 нет индекса на IdKey постройте и покажите план + вместе с планом покажите статистику работы запроса, т.е. добавьте к запросу следующие директивы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. _vita_Вот результат sp_helpdb tempdb: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 17:44 |
|
||
|
join in ASE 12.5.1
|
|||
|---|---|---|---|
|
#18+
_vita_ пишет: > Вот результат sp_helpdb tempdb: > name db_size owner dbid created status > ------ ------------- ----- ---- ------------ --------------------------------------------------------------------------------- > tempdb 1989.5 MB sa 2 Oct 05, 2009 select into/bulkcopy/pllsort, trunc log on chkpt, ddl in tran, mixed log and data > Копирование в tempdb 30000 записей в цикле происходит за меньше секунды. tempdb только на мастере ? Прикольно. Очень странно, что у вас вообще что-то работает. Это значит, у вас девственный, нетронутый рукой админа после установки сервер. Надо конфигурировать tempdb однако. > Index : #idx_Table2 > Forward scan. > Positioning by key. > Keys are: > Table1_Ref ASC Хороший план, правильный. Должен быть быстрым. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2009, 19:20 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=36232003&tid=2010886]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 269ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...