powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Доступ к битам поля
11 сообщений из 36, страница 2 из 2
Доступ к битам поля
    #32113490
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Oracle X-pert: Собственно, тебя просят показать не "vnutrennie dokumenty company", а выкладки, на основании которых был сделан вывод, что в операциях сравнения выгоднее использовать RAW. Мне любопытно: такой вывод был сделан на основании того, что данные типа RAW ва-аще можно сравнивать, раз существует функция UTL_RAW.COMPARE()? Но во-первых, мы говорим про битовые операции, а не сравнение побитно. Если уж стоит задача в сравнении двух чисел, то я, пожалуй, воспользуюсь тем же NUMBER, и буду сравнивать через операцию "=". Во-вторых, бог с ним, давай просто сравним стоимости миллиона вызовов UTL_RAW.COMPARE() и BITAND(). Особого смысла в этом не вижу, поскольку они выполняют разные операции (иначе не существовала бы функция UTL_RAW.BIT_AND()).

Код: 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.
create or replace type tbl_integer as table of integer;
/
create or replace function pivot_integer (
    p_start number
  , p_end number
) return tbl_integer
parallel_enable pipelined is
begin
  for i in p_start..p_end loop
    pipe row(i);
  end loop;
  return;
end;
/
create or replace type tbl_raw as table of raw( 9 )
/
create or replace function pivot_raw (
    p_start number
  , p_end number
) return tbl_raw
parallel_enable pipelined is
begin
  for i in p_start..p_end loop
    pipe row(utl_raw.cast_to_raw(i));
  end loop;
  return;
end;
/


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
dan@oraspb>; set autot traceonly stat
dan@oraspb>; set timing on
dan@oraspb>; select * from table(pivot_integer( 1 ,  1000000 )) 
   2   where bitand(column_value,  123 ) =  123 
   3   /                                                                 

 15624  rows selected.

Elapsed:  00 : 00 : 05 . 06 

dan@oraspb>; select * from table(pivot_raw( 1 ,  1000000 )) 
   2   where utl_raw.compare(column_value, utl_raw.cast_to_raw( 123 )) =  0 
   3   /
                    
Elapsed:  00 : 04 : 11 . 09 


Заметь, два этих запроса отвечают на совершенно разные вопросы, "AND" и "=". Я подозреваю, что загвоздка может быть в постоянном вызове UTL_RAW.CAST_TO_RAW. И вполне вероятно, что я где-то ошибся, уж очень существенная разница по времени. Пожалуйста, покажи свои выкладки.
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113625
Фотография MaxU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Oracle X-pert,

[quote]
Syt' proverki::
select * from my_tab
where UTL_RAW.COMPARE(colN,utl_raw.cast_tow_raw('MY PARAMETER')) = 0;
a ne select bitand(bit1, bit2)...
[/quote]


я что-то совсем запутался - я не понял что с чем это необходимо сравнивать (в твоем понимании/видении) и как это коррелирует с вопросом, заданным автором топика??

my guess:

UTL_RAW.COMPARE(colN,utl_raw.cast_tow_raw('MY PARAMETER')) = 0

bitand(col1,N)

??
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113638
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pust' col1 v tablize sodergit codes stroko parameters:
' work path screen size ' etc;
zapisi po prinzipy one-to-many::

1 user1 'c:\'
2 user1 'c:\ 800x600'
3 user1 'c:\ 800x600 all forms' etc.

Col2 codergit raw strok.
togda i est:
select user_profile from my_tab
where UTL_RAW.COMPARE(co2,utl_raw.cast_tow_raw('c:\ 800x600')) = 0.
poluchite stroky nomer 2;

Tak rabotaet bol'shinstvo modelei 'SAMSUNG' cell phones { color screen }.
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113682
Фотография MaxU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Oracle X-pert,

я не совсем понимаю как это соотносится с вопросом автора топика и в чем выигрыш данного подхода по сравнению с использованием битовых масок целых чисел??
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113689
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем мне использовать RAW, если я могу использовать VARCHAR2, построить индекс по этому полю и спросить: where col2 = 'c:\ 800x600'?. Проясни свою структуру, задача: есть сущности "ПОЛЬЗОВАТЕЛЬ" и "СВОЙСТВО". Как указать, что данный пользователь имеет такие-то свойства? Как выбрать пользователей, имеющих _набор_ (чуешь, набор) данных свойств? Как сформировать весь список свойств данного пользователя?

По моему мнению, в таких задачах существование таблицы-справочника возможных свойств и таблицы отношений пользователь-свойство отнюдь не считается излишним "дрыгоножеством и рукомашеством" ((с) Стругацкие). Об этом говорилось в самом начале топика. Ну а уж если клиентскому приложению надо, на лету формировал строку бит или строку свойств.

И еще, как в вышеприведенном примере будет выглядеть запрос:
select user_profile from my_tab where [col2 содержит 'c:\ 800x600'] ?
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113692
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Problema v tom, chto:

a) realizovat' logiku AND t.e.
where A = B
and a = C
and b = D
( sravni:: a in (b,c,d) or a like B etc.)
b) realizuemye selects obychno delaut Merjoin.
chto ne luchim obrazom skazyvaetsya na performance
( xample: where a = b
union
where a = c etc)
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113719
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз: пожалуйста, проясни свою структуру таблиц. Требуется очень много времени для догадок, что ты имеешь в виду. Покажи самое простое: есть 2 пользователя, U1 и U2. Есть 2 свойства P1 и P2. U1 имеет свойство P1, U2 имеет свойства P1 и P2.

1. Выбери все свойства пользователя U1.
2. Выбери все свойства пользователя U2.
3. Выбери всех пользователей, имеющих только свойство U1.
4. Выбери всех пользователей, имеющих только свойство U2.
5. Выбери всех пользователей, имеющих свойство U1 и U2.
6. Выбери всех пользователей, имеющих свойство U1 или U2.

Естественно, следует задействовать тип данных RAW.
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113727
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Punkt 5.
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113743
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что означает "Punkt 5."? Как выглядит структура таблиц? Как выглядят запросы?
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113781
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create table DEVICE_MASKS
(
DEVICE_ID NUMBER not null,
PARAMETER_NAME VARCHAR2(100) not null,
FORMAT_REF NUMBER not null,
FORMAT_NAME VARCHAR2(100),
STRING_MASKS VARCHAR2(2000),
BIT_MASK RAW(2000),
STATUS NUMBER,
CREATOR VARCHAR2(100),
CHANGED_BY VARCHAR2(100),
DATE_CREATED DATE default sysdate,
LAST_UPDATE DATE default sysdate
)
DEVICE_ID PARAMETER_NAME FORMAT_REF FORMAT_NAME STRING_MASKS BIT_MASK
1 IMAGE_FORMAT 1 JPG JPG 4A5047
1 IMAGE_FORMAT 2 GIF JPG,GIF 4A50472C474946
1 IMAGE_FORMAT 3 PNG JPG,GIF,PNG 4A50472C4749462C504E47
1 IMAGE_FORMAT 4 WBMP JPG,GIF,PNG,WBMP 4A50472C4749462C504E472C57424D50
1 IMAGE_FORMAT 5 NOL JPG,GIF,PNG,WBMP,NOL 4A50472C4749462C504E472C57424D502C4E4F4C
1 IMAGE_FORMAT 6 VIS JPG,GIF,PNG,WBMP,NOL,VIS 4A50472C4749462C504E472C57424D502C4E4F4C2C564953
1 MELODY_FORMAT 2 MID BUZ,MID 42555A2C4D4944
1 MELODY_FORMAT 3 MA1 BUZ,MID,MA1 42555A2C4D49442C4D4131
1 MELODY_FORMAT 4 MA2 BUZ,MID,MA1,MA2 42555A2C4D49442C4D41312C4D4132
1 MELODY_FORMAT 5 MA3 BUZ,MID,MA1,MA2,MA3 42555A2C4D49442C4D41312C4D41322C4D4133
1 MELODY_FORMAT 6 CMX BUZ,MID,MA1,MA2,MA3,CMX 42555A2C4D49442C4D41312C4D41322C4D41332C434D58
1 MELODY_FORMAT 7 AMR BUZ,MID,MA1,MA2,MA3,CMX,AMR 42555A2C4D49442C4D41312C4D41322C4D41332C434D582C414D52
1 MELODY_FORMAT 1 BUZ BUZ 42555A


Select * from DEVICE_MASKS
where = UTL_RAW.COMPARE(BIT_MASK, UTL_RAW.CAST_TO_RAW('JPG,GIF,PNG,WBMP')) = 0;


0.071 sec ( 8 700 000 rows) Index na bit_mask otsytstvuet.
...
Рейтинг: 0 / 0
Доступ к битам поля
    #32113805
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что сказать... "Если звезды зажигают - значит, это кому-нибудь нужно". Подобная структура говорит о том, что либо над ней долго шаманили в рамках _конкретной_задачи_, либо откуда-то перетащили, где подобный подход был единственно возможным. Свойства неравнозначны, к примеру, GIF автоматом подразумевает JPG, что опять же убеждает меня с своих выводах. Таблица прямо-таки затачивалась под один или несколько конкретных запросов. Теперь понятен упор на AND и полное игнорирование всего остального. Еще что могу сказать: ИМХО вряд ли стоит проектировать с нуля систему именно таким образом. Может быть, к подобному решению придется прибегнуть впоследствии, но начинать с этого, особенно занимаясь не "'SAMSUNG' cell phones { color screen }", а чем нибудь другим, я бы не стал.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Доступ к битам поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]