Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 любите ли вы RowId так, как люблю его я? :-)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
всё больше понимаю, что надо чаще им пользоваться!
Открыл тут для себя, что даже и предикаты вида:

...and rowid in ( CharToRowId('ADQufzAA/AADA36AAf'), CharToRowId(...


отлично и супер-быстро работают!
Ну правда про всякие транзакции через db-link и т.п. можно забыть. Но это не такой уж недостаток.
А то возникает дилема - на старых больших таблицах, где нету PK а что-то типа PK необходимо - беру просто RowId и всё решено!

А каков ваш опыт с сабжем?

____________________________________________________________
сейчас работаю на: Oracle 11.2.0.2.0, 64bit, standard edition, OU-Linux.
20 янв 15, 18:19    [17144494]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
ORAngutang
даже
даже? чему удивлен?
ORAngutang
всё больше понимаю, что надо чаще им пользоваться!
а если изменится rowid? например, в секционированной таблице строка переедет в другую секцию?
20 янв 15, 19:07    [17144711]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
Добрый Э - Эх
Guest
ORAngutang,

при харкодинге главное помнить, что rowid - далеко не константа...
20 янв 15, 19:07    [17144712]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
кит северных морей
Member

Откуда: krsk / nyc / krsk
Сообщений: 880
ORAngutang
А каков ваш опыт с сабжем?

в последний раз наблюдал, как в легаси-запросах через rowid реализовывалась логика "показать строки с максимальным значением по полю". запросы были какого-то такого вида (очень приблизительно, подробностей уже не помню):

select * from tab t1 where rowid in (select r from (select rowid r from tab t2 where t1.col = t2.col order by sort_key desc) where rownum = 1 )

на шаге table access by user rowid оптимизатор неверно считал cardinality для получаемого набора, вследствие чего последний неоптимально соединялся с другими таблицами на последующих шагах. замена rowid на набор полей с unique constraint проблему решила.
20 янв 15, 20:07    [17144941]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
кит северных морей
ORAngutang
А каков ваш опыт с сабжем?

в последний раз наблюдал, как в легаси-запросах через rowid реализовывалась логика "показать строки с максимальным значением по полю". запросы были какого-то такого вида (очень приблизительно, подробностей уже не помню):

select * from tab t1 where rowid in (select r from (select rowid r from tab t2 where t1.col = t2.col order by sort_key desc) where rownum = 1 )

на шаге table access by user rowid оптимизатор неверно считал cardinality для получаемого набора, вследствие чего последний неоптимально соединялся с другими таблицами на последующих шагах. замена rowid на набор полей с unique constraint проблему решила.
я бы посмотрел реальный пример, а вообще, что с unique, что с rowid иногда случаются очень хреновые join elimination
20 янв 15, 20:11    [17144953]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
Добрый Э - Эх
ORAngutang,

при харкодинге главное помнить, что rowid - далеко не константа...


ну да, ну да ))
Кстати секционированных таблиц нет. У нас нищебродский SE! ))
20 янв 15, 20:53    [17145078]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
Добрый Э - Эх
Guest
ORAngutang
ну да, ну да ))
Кстати секционированных таблиц нет. У нас нищебродский SE! ))
И [MOVE | shrink]TABLE у вас не делается? Импортом/экспортом данные никуда не таскаете, и банальные удаления строк и вставка новых не происходит? И вообще, у тебя база открыта в режиме READ ONLY. То есть ты можешь с уверенностью 100% гарантировать, что в твоей базе никогда не происходит смена физического размещения строк данных?
21 янв 15, 09:37    [17146452]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1943
ORAngutang
Добрый Э - Эх
ORAngutang,

при харкодинге главное помнить, что rowid - далеко не константа...


ну да, ну да ))
Кстати секционированных таблиц нет. У нас нищебродский SE! ))


backup/restore есть даже в вас, и результат неприятно вас удивит :D

Использовать rowid можно и нужно, но только в пределах сессии. Т.е. нашёл запись- и ссылайся на неё. Или через temp table.
А сохранённый в обычную таблицу rowid - это "слабоумие и отвага".
21 янв 15, 09:38    [17146457]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Иногда весьма эффективно обрабатывать объемные данные поэкстентно, через диапазоны rowid (штатно это используется в пакете dbms_parallel_execution). А вообще - rowid, как известно, самый быстрый способ обращения к строкам, надо только этим аккуратно пользоваться, о чем говорилось выше.
21 янв 15, 10:40    [17146945]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
Да ну
Member

Откуда: Первопрестольная
Сообщений: 242
ORAngutang
Добрый Э - Эх
ORAngutang,

при харкодинге главное помнить, что rowid - далеко не константа...


ну да, ну да ))
Кстати секционированных таблиц нет. У нас нищебродский SE! ))

Ну и еще помнить про UROWID вместо ROWID для IOT
21 янв 15, 11:05    [17147150]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Да ну
Ну и еще помнить про UROWID вместо ROWID для IOT
Так можно дойти и до того, что у разных таблиц в кластере с одинаковым значением кластерного ключа одинаковые rowid и в экзотических случаях это может быть важно. :)
Как по мне, главный момент в том, какие бы ни были сейчас ограничения, если потом они станут более слабыми, то приложение может перестать работать.
Например переехали с SE на EE а там появляется flashback и rowid становится "еще менее константной".
21 янв 15, 13:31    [17148313]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
Alexey Tomin
ORAngutang
пропущено...


ну да, ну да ))
Кстати секционированных таблиц нет. У нас нищебродский SE! ))


backup/restore есть даже в вас, и результат неприятно вас удивит :D

Использовать rowid можно и нужно, но только в пределах сессии. Т.е. нашёл запись- и ссылайся на неё. Или через temp table.
А сохранённый в обычную таблицу rowid - это "слабоумие и отвага".


не, ну эт-всё понятно. Да, использую в пределах сессии. "где поймал(SELECT-ом) там и .... э... попользовал(UPDATE-ом)" ))))
21 янв 15, 13:39    [17148383]     Ответить | Цитировать Сообщить модератору
 Re: любите ли вы RowId так, как люблю его я? :-)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
Да ну
ORAngutang
пропущено...


ну да, ну да ))
Кстати секционированных таблиц нет. У нас нищебродский SE! ))

Ну и еще помнить про UROWID вместо ROWID для IOT


дельное замечание!!! Спасибо!
21 янв 15, 13:39    [17148389]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить