|
|
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
Уважаемый народ!!! Прошу вашего участия в решении проблемы: Есть табличка1 , отсортированная по полю1 . Если я делаю SELECT FROM табличка1 JOIN табличка2 то в результате получаются данные, уже не отсортированные по полю1 , что очень печально. Объясните мне пожалуйста, может я как-то не так JOINю? Вообще, какие могут быть варианты? Слева, справа, Inner, т.д. - в чём разница? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2002, 19:27 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
Order by ... stavitsia v konce vseh Union. Mogno ssilatsia po # polia. Primer: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2002, 19:37 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
> Order by ??? Не-а. Зачем тогда я по-вашему табличку сортировал? Чтобы потом из неё записи по порядку и вылеали! А операция Order by в этом случае не применима - слишком долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2002, 19:50 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
Poluchi recept, esly nuzno ostabit staruyu sortirovku. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2002, 19:59 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
union all v etom sluchae nado primeniat. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2002, 20:01 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
>Объясните мне пожалуйста, может я как-то не так JOINю? Вообще, какие >могут быть варианты? Слева, справа, Inner, т.д. - в чём разница? это вообще какой-то странный подход к составлению sql запросов. Покажите мне, пожалуйста хоть один источник, где написано, что операция join должна сохранять сортировку в выходных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2002, 01:58 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
Ну а про варианты Join-a так никто и не объяснил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2002, 12:27 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
используй hint в select select /*+INDEX имя*/ ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2002, 09:16 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
(2) fraer: а вот и не факт что в таблице используется индекс :) (2) AndRew : кстати - что значит "отсортированная таблица" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2002, 16:50 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
Egeli posmotret na LUBOI select, v kotorom ucpolzuetsiy UNION to vidno chto poslednim shagom EXECUTION PLAN vsegda budet shag sortirovki-sliyaniya (SORT-MERGE). Poetomu primeniyaem mi index v hint ili ne primeniaem eto nikogo, i osobenno Oracle ne interesuet. Dlya sohraneniya poriadka zapicey KAK EST nugno primeniat UNION ALL a ne union. V etom sluchae Oracle otmeniaet shag sortirovki-sliyaniya. No nugno apriory smiritsia s vozmognostiu poyavleniya dubliruusch stok v rezultate zaprosa. Eto pokazano escho raz na primere nige: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2002, 21:26 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
2 Silver: кстати - что значит "отсортированная таблица" ? Я всегда думал, что если заполнить таблицу вот так: Код: plaintext То потом, когда я буду из этой таблицы простым datasetом (select * from table1) данные тянуть, то они полезут строго order by ПОЛЕ1 desc. Разве не так? Разве ораклу пополам, как заполнялась таблица, и данные он будет отгружать как захочет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 11:19 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
В реляционных БД данные хранятся неупорядоченно по определению. Если Ораклу не указывать явно как сортировать селект, он вроде бы по ROWID сортирует - адрес блока + адрес строки в нём. А по каким блокам insert into table1 (поля, поля...) select (поля, поля...) from table2 order by ПОЛЕ1 desc записи пораспихает сказать заранее нельзя. Может все подряд положит, а может и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 18:07 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
2) Oleg1 Этот Insert в общем случае не гарантирует упроядоченности записей в таблице. 1 Вариант - таблица 1 уже cодержит записи 1.1 - для таблицы установлен freelists = 1, HWM показывает на последний заполненный блок и во freelist нет промежуточных блоков в середине табличного(ных) экстента -- наиболее вероятно что записи будут упорядоченны 1.2. - для таблицы установлен freelists > 1 - потенциально порядок записей (а точнее порядок прохождения отдельных freelists) произвольный, как решит DBRW в каком порядке он будет проходить "грязные блоки" в db cache 2. Таблица не содержит записей - зависит от freelists (>1 или =1) соответственно потенциально неупорядоченно или упорядоченно. Кроме того нужно всегда иметь ввиду дополнительные параметры системы: -- количество процессоров (и CPU_COUNT в init.ora) -- количество процессов DBRW -- наличие и "работоспособность" ASYNC_IO для OS ... Так что ответ об упорядонности записей в общем случае неопределенный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 18:51 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
Гена, в пункте 1.2 к списку freelist обращаются серверные (shadow) процессы. DBWR ничего не знает о freelists. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 19:40 |
|
||
|
Порядок записей после Join'а
|
|||
|---|---|---|---|
|
#18+
2 killed Soversehho soglasen. No ya imel vvidu kak raz to chto bloki (pri freelists>1) prakticheski garantirovanno popadut v raznie uchastli db cache (pri nalichii bolee chem 1 aktivnoy sessii) i kogda dbrw budet pisat 'dirty blocks' obratno to on budet perocodit v sootvetstbii so svoim predstavleinem o posledovatelnosti zapici. t.e -- on skaniruet LRU (ili neskolko LRU) kak ustanovlenno, posledowatelno v sootvetctvii s poriadkom blockv ne v db cache a v sootvetstvii s poriadkom ukazateley v LRU i peremeschaet ih v LRUW, a DBRW(s) prosto ih posledovatelno pishet iz LRUW(s) v faili dannih (pravda opiat ge posle markirowki etih blockov LGRW) iskluchene sostavliaut tolko zapis v TRANSACTION SPECIFIC global temporary tables. poskolku NOLOGGING otmenaet zapis v log no ne v fail dannih, a session specific GTT imeut vnutrennuu strukturu ochen pohoguu na obichie tablici. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 20:16 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32085421&tid=1992249]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 540ms |

| 0 / 0 |
