|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
сорри если совсем глупый вопрос! Нужно перенести определенные записи из таблицы A в таблицу B, сгенерировав PrimaryKey PK в таблице B, которого в таблице A нет. Нет проблем, пользуем rownum , получаем такое: Код: sql 1.
теперь задача усложняется: нужно, чтобы PK был отсортирован по полям таблицы A, т.е. в SELECT таким образом можно получить правильную последовательность значений PK/rownum: Код: sql 1.
Но в INSERT применять ORDER BY нельзя. Как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 12:27 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Кому татор - а кому лятор, Технически, такое сделать можно (инлайн вью, аналитика - row_number). Но смысл хотелки непонятен. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 12:40 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Кому татор - а кому лятор Но в INSERT применять ORDER BY нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 12:45 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Кому татор - а кому лятор, Код: plsql 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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 13:07 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Stax, Ну-ну. А теперь представь что на момент вставки подходящий экстент начинался с блока 10000. Oracle его заполнил и стал искать второй подходящий экстент и на этот момент подходящий экстент начинался с блока 7000. Что выдаст select? Или на момент вставки подходящий экстент был в datafile с ID = 22 а следующий в datafile с ID = 21. Или банально optimizer решил использовать parallel. SELECT без ORDER BY не гарантирует ибо нет понятия порядок строк в реляционных таблицах и ты это прекрасно знаешь. Так-что INSERT с ORDER BY только замедлит INSERT и не даст никакого гарантированного последующего преимущества типа SELECT без ORDER BY будет выдавать упорядоченные строки. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 14:08 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY, Это сломает rownum from (select ... order by ...) или оконный row_number? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 14:15 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY Так-что INSERT с ORDER BY только замедлит INSERT и не даст никакого гарантированного последующего преимущества типа SELECT без ORDER BY будет выдавать упорядоченные строки. insert+order by ему нужен чтобы порядок сгенерированного из rownum empno соответствовал порядку ename, а не для выборки без order by. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 14:28 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY, Если вы про эту демонстрацию результата Stax Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
stax То здесь вы совершенно правы, она действительно может вводить неокрепшие умы в заблуждение. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 14:34 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
graycode SY, Это сломает rownum from (select ... order by ...) или оконный row_number? select rownum from (select ... order by ...) на данный момент не думаю ибо, насколько я понимаю, optimizer не использует материализацию для in-line view. А вот для with t as (select ... order by ...) select rownum from t думаю может если материализует (select ... order by ...) и скажем решит читать материализацию in parallel. Или если скажем TEMP как швейцарский сыр и при материализации последующий экстент будет начинаться с блока < предыдущего экстента. Оконный row_number joined by the hip (сиамские близнецы) с ORDER BY, так-что нет. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 14:37 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY INSERT с ORDER BY только замедлит INSERT и не даст никакого гарантированного последующего преимущества Ну тут зависит от того, на какое преимущество рассчитывать. К примеру, в CBOSS была разработана технология сортировки разделов с трафиком для улучшения характеристик отдельных индексов и общего увеличения производительности биллинга за счет кластеризации данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:06 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY Stax, Ну-ну. А теперь представь что на момент вставки подходящий экстент начинался с блока 10000. Oracle его заполнил и стал искать второй подходящий экстент и на этот момент подходящий экстент начинался с блока 7000. Что выдаст select? Или на момент вставки подходящий экстент был в datafile с ID = 22 а следующий в datafile с ID = 21. Или банально optimizer решил использовать parallel. SELECT без ORDER BY не гарантирует ибо нет понятия порядок строк в реляционных таблицах и ты это прекрасно знаешь. Так-что INSERT с ORDER BY только замедлит INSERT и не даст никакого гарантированного последующего преимущества типа SELECT без ORDER BY будет выдавать упорядоченные строки. SY. не верю что в insert into emp2 select rownum+1000,ename from (select * from emp order by ename); order by будет проигнорирован допустим добавлю я еще and rownum<1e100, но зачем? ps забыл select * from emp2; может выдать в любом порядке, ето просто визуализация что вставилось ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:10 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Stax не верю что в insert into emp2 select rownum+1000,ename from (select * from emp order by ename); order by будет проигнорирован ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:28 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
andrey_anonymous в CBOSS была разработана технология ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:38 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
кит северных морей Stax не верю что в insert into emp2 select rownum+1000,ename from (select * from emp order by ename); order by будет проигнорирован И где это документировано? Сегодня не будет а завтра... SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:44 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY И где это документировано? КОГДА ИМЕННО он выполнит order by - да, это хороший вопрос, и замечание про то, что он может быть выполнен до материализации, со всеми вытекающими - совершенно справедливое. ну так это задача программиста - сделать так, чтобы он выполнялся тогда, когда надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:57 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
кит северных морей да есть hybrid columnar compression, зачем далеко ходить. А тут полностью согласен. Даже для advanced compression с условием в наборе есть повторяющиеся данные, т.е. col1 в ORDER BY col1 не unique. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 15:58 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
кит северных морей да есть hybrid columnar compression, зачем далеко ходить. "л" - суффикс прошедшего времени. Под девятку работали тогда. Был HCC в девятке? В каком патче? А тут упомянул просто как пример неочевидных выгод, которые можно получить от внешне бессмысленных действий :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 16:03 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
кит северных морей так это задача программиста - сделать так, чтобы он выполнялся тогда, когда надо. В яблочко - посему зачем использовать "плано-зависимый" ROWNUM когда есть "плано-независимый" ROW_NUMBER. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 16:04 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Да это далеко не "бессмысленные действия" Улучшить фактор кластеризации определенного индекса достигалось именно перестройкой таблицы/секции с определенной сортировкой Что уж там говорить про BASIC компрессию таблиц/секций, которая тоже весьма и весьма зависела от упорядочености (точнее неуникальности) значений в блоке И частенько эти факторы совсем друг с другом не бились -- с одной стороны в десятки раз меньший объем чтения с диска за счет эффективного сжатия внутри блоков для массовой обработки (чтения, конечно), с другой стороны применение правильного индекса... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 16:19 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY И где это документировано? Сегодня не будет а завтра... SY. Home / Database / Oracle Database Online Documentation 12c, Release 1 (12.1) / Database Administration авторIf you embed the ORDER BY clause in a subquery and place the ROWNUM condition in the top-level query, then you can force the ROWNUM condition to be applied after the ordering of the rows. For example, the following query returns the employees with the 10 smallest employee numbers. This is sometimes referred to as top-N reporting: SELECT * FROM (SELECT * FROM employees ORDER BY employee_id) WHERE ROWNUM < 11; In the preceding example, the ROWNUM values are those of the top-level SELECT statement, so they are generated after the rows have already been ordered by employee_id in the subquery. https://docs.oracle.com/database/121/SQLRF/pseudocolumns009.htm#SQLRF00255 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 17:13 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY кит северных морей так это задача программиста - сделать так, чтобы он выполнялся тогда, когда надо. В яблочко - посему зачем использовать "плано-зависимый" ROWNUM когда есть "плано-независимый" ROW_NUMBER. SY. Вашими ж устами ROW_NUMBER прономерует есть ли гарантия что выходной набор будет упорядочен по ROW_NUMBER без явного order by имхо, нет тоесть надо select row_number() over (order by ename) rn,ename from emp order by rn зы ето ж разовые операции, мож в версии 21-й что-то изменится, променяется и инсерт .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 17:21 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Stax есть ли гарантия что выходной набор будет упорядочен по ROW_NUMBER без явного order by нету, но для исходной задачи ТС она и не нужна. ему нужно сгенерировать первичный ключ в правильном порядке, и вставить данные, а произойдет вставка в порядке ПК, или в каком-то другом - не критично. если критично - ну, либо order by, либо clustering by linear order (pk) yes on load на таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 17:30 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
Stax тоесть надо select row_number() over (order by ename) rn,ename from emp order by rn надо Код: plsql 1. 2.
Код: plsql 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.
Оптимизатор прекрасно понимает что сортировать надо один раз. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 17:31 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
SY Оптимизатор прекрасно понимает что сортировать надо один раз. параллельный запрос будет отдавать в поряке колонки, которая указана в over (order by col), но не в порядке результата row_number. при неуникальных значениях это не одно и то же. для этого нужен отдельный order by и отдельный sort в плане. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 17:39 |
|
возможен ли INSERT с сортировкой?
|
|||
---|---|---|---|
#18+
кит северных морей параллельный запрос будет отдавать в поряке колонки, которая указана в over (order by col), но не в порядке результата row_number. при неуникальных значениях это не одно и то же. для этого нужен отдельный order by и отдельный sort в плане. Именно поэтому в моем ответе stax ORDER BY ENAME,EMPNO что гарантирует порядок ROW_NUMBER = порядок строк. Если нет уникального поля можно использовать ROWID. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 20:09 |
|
|
start [/forum/topic.php?fid=52&tid=1880782]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
81ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 304ms |
total: | 472ms |
0 / 0 |