|
|
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Заметь, два этих запроса отвечают на совершенно разные вопросы, "AND" и "=". Я подозреваю, что загвоздка может быть в постоянном вызове UTL_RAW.CAST_TO_RAW. И вполне вероятно, что я где-то ошибся, уж очень существенная разница по времени. Пожалуйста, покажи свои выкладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 11:38 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
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) ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 13:49 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
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 }. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 14:08 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
2 Oracle X-pert, я не совсем понимаю как это соотносится с вопросом автора топика и в чем выигрыш данного подхода по сравнению с использованием битовых масок целых чисел?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 14:56 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
А зачем мне использовать RAW, если я могу использовать VARCHAR2, построить индекс по этому полю и спросить: where col2 = 'c:\ 800x600'?. Проясни свою структуру, задача: есть сущности "ПОЛЬЗОВАТЕЛЬ" и "СВОЙСТВО". Как указать, что данный пользователь имеет такие-то свойства? Как выбрать пользователей, имеющих _набор_ (чуешь, набор) данных свойств? Как сформировать весь список свойств данного пользователя? По моему мнению, в таких задачах существование таблицы-справочника возможных свойств и таблицы отношений пользователь-свойство отнюдь не считается излишним "дрыгоножеством и рукомашеством" ((с) Стругацкие). Об этом говорилось в самом начале топика. Ну а уж если клиентскому приложению надо, на лету формировал строку бит или строку свойств. И еще, как в вышеприведенном примере будет выглядеть запрос: select user_profile from my_tab where [col2 содержит 'c:\ 800x600'] ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 15:04 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 15:17 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
Еще раз: пожалуйста, проясни свою структуру таблиц. Требуется очень много времени для догадок, что ты имеешь в виду. Покажи самое простое: есть 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 15:38 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
Что означает "Punkt 5."? Как выглядит структура таблиц? Как выглядят запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 15:54 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 16:37 |
|
||
|
Доступ к битам поля
|
|||
|---|---|---|---|
|
#18+
Что сказать... "Если звезды зажигают - значит, это кому-нибудь нужно". Подобная структура говорит о том, что либо над ней долго шаманили в рамках _конкретной_задачи_, либо откуда-то перетащили, где подобный подход был единственно возможным. Свойства неравнозначны, к примеру, GIF автоматом подразумевает JPG, что опять же убеждает меня с своих выводах. Таблица прямо-таки затачивалась под один или несколько конкретных запросов. Теперь понятен упор на AND и полное игнорирование всего остального. Еще что могу сказать: ИМХО вряд ли стоит проектировать с нуля систему именно таким образом. Может быть, к подобному решению придется прибегнуть впоследствии, но начинать с этого, особенно занимаясь не "'SAMSUNG' cell phones { color screen }", а чем нибудь другим, я бы не стал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 17:05 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32113727&tid=1991636]: |
0ms |
get settings: |
7ms |
get forum list: |
26ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
207ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 515ms |

| 0 / 0 |
