|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Добавлять колонки нельзя. По какой причине? Добавление суррогатного ключа здесь напрашивается как наиболее разумное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 11:41 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Остаются запросы с сортировкой по выражению с повторяющимися значениями. Поскольку методы сортировки Оракла не являются стабильными* ... * Стабильность сортировки это свойство, относящееся к обработке одинаковых значений. Хоспади, какая бредятина. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 12:08 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Комментарии прочитаны и приняты. ...но, к сожалению, не осознаны НеофитSQL Order by rowid вполне подходит rowid, если уж Вы рассмотрели его структуру, суть указатель на физическое размещение строки. Одно это должно было заставить Вас заподозрить подвох. Дальше неплохо бы знать пару кое-что про выделение места в табличных пространствах oracle rdbms, но для этого - увы и ах - надо было читать документацию. Есть как минимум три вещи, не позволяющие считать rowid монотонно возрастающим, и которые Вы никогда не сможете осознать на базе эспериментов над парой тысяч строк: 1. Обычное (не bigfile) табличное пространство может состоять (и обычно состоит) из нескольких файлов данных, заполняемых +-равномерно. В этом месте отсылаю к той самой структуре rowid, а именно - к компоненте "номер файла данных". 2. Место под хранение в табличном пространстве выделяется экстентами. Механизмов выделения экстентов исторически есть несколько штук, но в контексте обсуждаемого вопроса следует знать, что любой из них предпочтет расширению табличного пространства выделить место там, где оно есть по факту. Тут снова отсылаю к структуре rowid, компонент - номер блока. 3. Если вставка осуществляется conventional insert (т.е. без применения механизмов direct/append), то механика oracle предпочтет вставить новые строки в те блоки, которые значатся у него как свободные (т.е. не забитые под завязку). Этих механизмов тоже исторически есть несколько штук, но все они также работают на более плотную упаковку данных. Компоненты "Номер файла", "номер блока". Таким образом, даже без учета административных воздействий на БД полагаться на монотонность rowid суть большая глупость. НеофитSQL этот порядок уже и так является по умолчанию для индексных запросов. Не очень понятно что такое "индексный запрос". Подозреваю, что, не владея терминологией, Вы таким образом обозначили целый класс методов доступа к данным посредством btree-индекса (index full scan {ascending|descending}, index fast full scan, index range scan {ascending|descending}, index unique scan). Эти методы работают по разному, но есть одно общее свойство: ни один из них не будет возвращать данные в порядке rowid, поскольку btree-индексы по природе своей упорядочены по атрибутам, входящим в индекс - это важно. Подозреваю также, что с толку сбило упоминание о том, что btree отсортированы binary. Но осмысление этого замечание требует в дополнение к концептам и руководствам по разработке осознания еще одного фолианта - globalization support guide , без которого рассуждать на данные темы смысла нет. Опустим пока тот незамысловатый факт, что индексы oracle одним btree не ограничиваются и включают в себя bitmap, function-based и доменные индексы (к примеру, Oracle Text и Oracle Spatial, про кастомные реализации ODCIIndex и говорить пока не стоит). НеофитSQL Не удивлюсь, если "select * from TABLE" уже и так возвращает строки в порядке rowid по умолчанию. Надо сильно извергаться, чтобы оправдать порядок отличный от этого. Меньше знаешь - крепче спишь. На поверхности: - экстенты сегмента таблицы могут быть расположены в нескольких файлах данных - доступ может быть распараллелен - метод доступа может измениться НеофитSQL кластерные грабли Кластер кластеру люпус эст. Есть кластер как метод хранения данных, способный задать строкам разных таблиц один rowid. Есть RAC, в котором и без того не очень простые процессы добычи данных становятся еще сложнее ввиду кластерных взаимодействий (cache fusion). Общее замечание: oracle rdbms - штука сложная. Очень сложная. А еще - это черный ящик, в который мы иногда подглядываем через различные технологические отверстия. Даже признанные специалисты с многолетним бэкграундом не всегда знают "как наше слово отзовется". Потому не стоит делать серьезные выводы на основании пары простеньких экспериментов - Вы исследовали более чем ограниченную локацию и обобщения элементарно некорректны. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 13:35 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
andrey_anonymous Не очень понятно что такое "индексный запрос". Но, как обычно, видит только малую часть -- IOT не очень часто используемая вещь и даже в IOT метод доступа IFFS (Index Fast Full Scan) плюет на UROWID и, соответственно, любое упорядочевание ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 14:09 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Есть подозрение, что он имеет ввиду IOT и UROWID Эт вряд ли :) НеофитSQL есть таблица, в которой владелец не предусморел первичного ключа ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 14:41 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров НеофитSQL Order by rowid вполне подходит для такой полевой кухни, хотя позже я узнал, что этот порядок уже и так является по умолчанию для индексных запросов https://docs.oracle.com/cd/B13789_01/server.101/b10752/optimops.htm "Multiple rows with identical values are sorted in ascending order by rowid." > И собственно, если ты решил, что более поздние строки имеют больший ROWID, то ты таки хреново рассмотрел структуру ROWID Таких гарантий нет,т.к. rowid удаленных строк может использоваться для новых Однако у меня получилось создать клон таблицы с одинаковым порядком rowid для моих временных целей, ь.к. в новой таблице rowid аллокируется в возрастающем порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:20 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL для моих временных целей ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:22 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL у меня получилось создать клон таблицы с одинаковым порядком rowid для моих временных целей, ь.к. в новой таблице rowid аллокируется в возрастающем порядке. рукалицо... andrey_anonymous не стоит делать серьезные выводы на основании пары простеньких экспериментов - Вы исследовали более чем ограниченную локацию и обобщения элементарно некорректны. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:22 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
Vadim Lejnin, > А еще есть NLS Bomb... К чему это? Порядок сортировки по rowid как раз не зависит от NLS settings. Про 1024 процессоров не знаю; документация оракла раньше обсуждала детерминизм строчек как если бы многопроцессорность не влияла на результаты исполнения отдельного запроса. Это все легко проверить контрпримером: словить один единственный случай, когда строки возвращаемые запросом без сортировки не следуют порядку rowid. Сортировка по умолчанию - это тема которая быстро вызывает гипертонию у начитанных специалистов, я предпочитаю не не развивать. Для индексных запросов оракл гарантирует определенный порядок по умолчанию, насчёт других я не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:32 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL ... Для индексных запросов оракл гарантирует определенный порядок по умолчанию... Конечно нет , без указания явного order by. Но иногда результат бывает похожим. И правда, иногда , такой идеей пользуются, если точно понимают , что делают. Но это хрустальный подход. Почитайте про "поиск по rowid" и подумайте о пределах предоставляемых гарантий для "индексных запросов", даже с оговоркой на то, что параллельных запросов у вас никогда не будет, и дезорганизация порядка от параллельности не приедет. А с учетом расширения вариаций доступа в новых версиях до rowid batched и clustered by rowid - чисто смехотворное упорство, которому давно следовало бы поискать лучшее применение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:49 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Вячеслав Любомудров пропущено... Вот это про что сейчас было? https://docs.oracle.com/cd/B13789_01/server.101/b10752/optimops.htm "Multiple rows with identical values are sorted in ascending order by rowid." Ты бы хоть полную цитату приводил " target="_blank" rel="ugc">https://docs.oracle.com/cd/B13789_01/server.101/b10752/optimops.htm#45076]|> https://docs.oracle.com/cd/B13789_01/server.101/b10752/optimops.htm Index Range Scans An index range scan is a common operation for accessing selective data. It can be bounded (bounded on both sides) or unbounded (on one or both sides). Data is returned in the ascending order of index columns. Multiple rows with identical values are sorted in ascending order by rowid. Это тебе еще предстоит узнать, что не бывает неуникальных индексов -- просто в этом случае как поле сортировки ( при совпадающих остальных полях ) используется ROWID записи, ну просто потому, что он так и так является частью индекса ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:49 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL проверить контрпримером: словить один единственный случай, когда строки возвращаемые запросом без сортировки не следуют порядку rowid. Держи на бедность: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 16:07 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Это все легко проверить контрпримером: словить один единственный случай, когда строки возвращаемые запросом без сортировки не следуют порядку rowid. Сортировка по умолчанию - это тема которая быстро вызывает гипертонию у начитанных специалистов, я предпочитаю не не развивать. Для индексных запросов оракл гарантирует определенный порядок по умолчанию, насчёт других я не знаю. Ты немножко не с той стороны зашел. RowId - это техническая лабуда вроде номера физического сектора файла на диске. И к ней нельзя привязывать бизнес-запросы. Это все равно что тебя интересовал-бы номер физического сектора на диске. Или значение указателя в С++ приложении. Если тебе нужно чтобы просто данные не менялись между запросами - ну посмотри set transaction read only. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:57 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL проверить контрпримером: словить один единственный случай, когда строки возвращаемые запросом без сортировки не следуют порядку rowid. Держи на бедность: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
"На бедность". Мне так и не удалось создать таблицу которая размещалась бы в двух или более файлах. Как вы это сделали? Я даже прошерстил всю рабочую данных, каждая таблица умещается ровно в один файл. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:30 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Мне так и не удалось создать таблицу которая размещалась бы в двух или более файлах. Как вы это сделали? Создал таблицу. Наполнил данными, обеспечив выделение нескольких экстентов. Никаких - подчеркиваю - фокусов, это штатное поведение. Концепты надо изучать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:40 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL select * from USER_TABLES where tablespace_name = 'USERS' Убедитесь, что Ваше табличное пространство состоит более чем из одного файла. dba_data_files ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:45 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL проверить контрпримером: словить один единственный случай, когда строки возвращаемые запросом без сортировки не следуют порядку rowid. Держи на бедность: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Интересно, какая у вас версия Оракла? У меня не получается декодировать вышеперечисленные ROWID. Например, "AABKoNAB/AAADCPAAC" декодируется (басе-64) в 00004aa0 d00 1fc00000c23c000 12431 это 0х308F, 127 это 0x7F - это легкозаметные в шестнадзатеричномсочетания бит отсутствуют. Кроме Base-64, я не нашел других систем кодировок. Как эти ROWID сформированы? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:07 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL select * from USER_TABLES where tablespace_name = 'USERS' Убедитесь, что Ваше табличное пространство состоит более чем из одного файла. dba_data_files Точно. Всего один файл USERS.DBF, у меня какая-то игрушечная БД что ли? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:10 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL У меня не получается декодировать вышеперечисленные ROWID. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:12 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Всего один файл USERS.DBF, у меня какая-то игрушечная БД что ли? :) В промышленных БД редко держат данные в users, обычно создают табличные пространства под задачу. dba_tablespaces Подозреваю, что users - default tablespace используемой схемы, только и всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:14 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL У меня не получается декодировать вышеперечисленные ROWID. Например, "AABKoNAB/AAADCPAAC" декодируется (басе-64) в 00004aa0 d00 1fc00000c23c000 12431 это 0х308F, 127 это 0x7F - это легкозаметные в шестнадзатеричномсочетания бит отсутствуют. Кроме Base-64, я не нашел других систем кодировок. Как эти ROWID сформированы? Тебе это зачем? Тебе человек дал пакет dbms_rowid - вот и используй его! Тыж с Ораклом работаешь а не с абстрактным SQL. И вопрос 100% оракловый. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:22 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
mayton НеофитSQL Это все легко проверить контрпримером: словить один единственный случай, когда строки возвращаемые запросом без сортировки не следуют порядку rowid. Сортировка по умолчанию - это тема которая быстро вызывает гипертонию у начитанных специалистов, я предпочитаю не не развивать. Для индексных запросов оракл гарантирует определенный порядок по умолчанию, насчёт других я не знаю. Ты немножко не с той стороны зашел. RowId - это техническая лабуда вроде номера физического сектора файла на диске. И к ней нельзя привязывать бизнес-запросы. Это все равно что тебя интересовал-бы номер физического сектора на диске. Или значение указателя в С++ приложении. Если тебе нужно чтобы просто данные не менялись между запросами - ну посмотри set transaction read only. Они уже не меняются, база спящая / учебная. Ваш пример с диском кстати удачный. Еще не так давно, dir давал неупорядоченный список файлов по умолчанию, в физическом порядке в котором они перечислены в блоках директории. Поведение предсказуемое и повторимое, а также задокументированное. То же самое в линуксе, ls -u дает физический порядок имен файлов, который неизменен на read-only носителе. Упорядоченный по имени список файлов (Вин10) меня тоже устраивает, т.к. имя файла в директории обладает уникальностью, и порядок неоднозначно установлен. А вот сортировка по размеру, дате или другому возможно повторяющемуся параметру не годится для анализа, т.к. две идентичные директории могут показать файлы в отличающемся порядке. Кодеры Оракла приняли воинствующую позу по этому вопросу, чтобы обезопасить новичков от дорогих ошибок, и фраза "если нужен какой-то определенный порядок, только сортировка по уникальному ключу его обеспечит". Мы знаем из документации что это не совсем так, например select * from TBL х where x.val between 10 and 20 всегда даст строчки в одном и том же порядке при наличии индекса для val (группа val=10 упорядоченная по rowid, потом группа 11, и т.д.), но это скорее исключения которые представляют академический интерес. Узнав многое в этой теме, я согласен что rowid может обеспечивать определенный порядок на какое-то неизвестное время, и не для всех таблиц. С точки зрения изучения данных таблицы недоступной для записи, самое простое и надежное решение - сделать копию данных и добавить первичный ключ. Этот порядок созданный при, или вскоре после копирования, будет гарантированным на неограниченное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:45 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
mayton НеофитSQL У меня не получается декодировать вышеперечисленные ROWID. Например, "AABKoNAB/AAADCPAAC" декодируется (басе-64) в 00004aa0 d00 1fc00000c23c000 12431 это 0х308F, 127 это 0x7F - это легкозаметные в шестнадзатеричномсочетания бит отсутствуют. Кроме Base-64, я не нашел других систем кодировок. Как эти ROWID сформированы? Тебе это зачем? Тебе человек дал пакет dbms_rowid - вот и используй его! Тыж с Ораклом работаешь а не с абстрактным SQL. И вопрос 100% оракловый. Праздное любопытство, ничего более. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:47 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL У меня не получается декодировать вышеперечисленные ROWID. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Спасибо, теперь все понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 20:08 |
|
Строгий порядок строк в чужой таблице
|
|||
---|---|---|---|
#18+
НеофитSQL Упорядоченный по имени список файлов (Вин10) меня тоже устраивает, т.к. имя файла в директории обладает уникальностью, и порядок неоднозначно установлен. А вот сортировка по размеру, дате или другому возможно повторяющемуся параметру не годится для анализа, т.к. две идентичные директории могут показать файлы в отличающемся порядке. В Windows 10 при файловой системе NTFS, файлы в директории лежат как B+Tree по имени файлов беря в качестве ключа имя файла. Тоесть это сортированная структура. Попробуй зайди в каталог c:\Windows и сделай dir без параметров. Ты увидишь какраз итерацию по этой сортированной структуре. Тоесть порядок стабилен до тех пор пока никто не всунул новый файл. А если это будет флешка отформатированная под FAT-32 то там будет порядок как "бог даст". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 20:17 |
|
|
start [/forum/topic.php?fid=52&msg=40011967&tid=1880769]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
109ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 308ms |
total: | 540ms |
0 / 0 |