Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по странному предикату в запросе / 15 сообщений из 15, страница 1 из 1
03.02.2017, 22:14
    #39398480
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
В одной биллинговой системе разработчики используют запрос примерно такого вида:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT /*+ INDEX(m svrm_service_idx) */  
    a.periodic_acct_id, 
        s.login, 
        m.moment, 
        SUM(money), 
    m.tariffel_id, 
    m.service_amount 
FROM     
    bm_service_money    m, 
    bm_periodic_acct    a, 
    services            s, 
    bm_charge_type      ct 
WHERE s.customer_id = :id
AND m.periodic_acct_id = a.periodic_acct_id 
AND s.service_id = m.service_id 
AND     a.moment >= date'2016-01-01' 
AND     a.moment <= date'2017-02-01'
AND ct.mnemonic = 'postpaid' 
AND m.charge_type_id <> ct.charge_type_id 
GROUP   BY a.periodic_acct_id, s.login, m.moment, period_start, period_stop, m.tariffel_id, m.service_amount 
ORDER   BY a.periodic_acct_id 



Мне этот фрагмент непонятен:
Код: plaintext
1.
2.
AND ct.mnemonic = 'postpaid' 
AND m.charge_type_id <> ct.charge_type_id 

Чем он может быть вызван?
Разработчик просто ошибся или это такой косвенный способ подсказки оптимизатору?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
04.02.2017, 00:42
    #39398506
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Alibek B.,

скорее всего, какой-то предикат джойна еще потеряли
...
Рейтинг: 0 / 0
04.02.2017, 08:14
    #39398524
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Почему?
Просто в отчет включаются все виды (оплаты?) кроме 'postpaid'
...
Рейтинг: 0 / 0
04.02.2017, 10:59
    #39398546
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Вячеслав ЛюбомудровПросто в отчет включаются все виды (оплаты?) кроме 'postpaid'
Но почему таким странным способом?
Почему не
Код: plaintext
1.
2.
AND m.charge_type_id = ct.charge_type_id
AND ct.mnemonic != 'postpaid'
?
...
Рейтинг: 0 / 0
04.02.2017, 11:08
    #39398550
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Например есть еще mnemonic IS NULL и он тоже должен участвовать в выборке
Сделай два плана и сравни, в конце концов, делов-то
...
Рейтинг: 0 / 0
04.02.2017, 13:25
    #39398578
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Alibek B.Но почему таким странным способом?
Почему неСмахивает на крипто-программирование: чтоб сопровожденцы не догадались.
Я бы подобную мысль формулировал через NOT IN.
...
Рейтинг: 0 / 0
04.02.2017, 17:29
    #39398660
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
ElicAlibek B.Но почему таким странным способом?
Почему неСмахивает на крипто-программирование: чтоб сопровожденцы не догадались.
Я бы подобную мысль формулировал через NOT IN .когда сопровождаешь систему, которую 40 человек писали 15 лет, то понимаешь - чем проще и понятнее, тем лучше. Я тоже написал бы через NOT IN
...
Рейтинг: 0 / 0
05.02.2017, 13:19
    #39398830
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
я бы такое точно не писал бы через not in

С высокой вероятностью - charge_type_id - первичный ключ, а mnemonic - альтернативный ключ для charge_type_id.
У меня бы рука не поднялась написать здесь Not in
Может быть -
Код: plsql
1.
m.charge_type_id <> (Select ct.charge_type_id From bm_charge_type ct Where ct.mnemonic = 'postpaid'  )



Но, конечно, получающиеся планы хотелось бы видеть глазом, хотя бы невооружённым,
и полные определения таблиц.
...
Рейтинг: 0 / 0
05.02.2017, 13:46
    #39398839
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
boobyУ меня бы рука не поднялась написать здесь Not inХозяин - барин.
boobyи полные определения таблиц.Кто как девицу видит, тот так её и танцует.

P.S. Кто-то обобщает на будущее, а кто-то зачем-то пялится в планы.
...
Рейтинг: 0 / 0
05.02.2017, 13:59
    #39398841
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Elic,

на будущее исходный вариант уже обобщен, способом неотличимым от NOT IN.
Вопрос в том, что надо иметь в голове, чтобы видеть будущее с не уникальным ct.mnemonic
...
Рейтинг: 0 / 0
05.02.2017, 14:13
    #39398843
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
boobyчто надо иметь в голове, чтобы видеть будущее с не уникальным ct.mnemonicБизнес требования или способы их реализации меняются. И мнемоника может стать перечислением. Но жажда планов (накуя?) мешает об этом задуматься.
...
Рейтинг: 0 / 0
05.02.2017, 14:25
    #39398846
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
booby...

на будущее исходный вариант уже обобщен, способом неотличимым от NOT IN.
...
пожалуй так:
способом, вероятно лучшим, чем not in, по крайней мере на сегодня.
...
Рейтинг: 0 / 0
05.02.2017, 14:31
    #39398852
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Elic...
Бизнес требования или способы их реализации меняются. И мнемоника может стать перечислением .
В таком будущем сегодняшний NOT IN не отличим от сегодняшнего скалярного подзапроса.

ElicНо жажда планов (накуя?) мешает об этом задуматься.
Это слишком космического уровня знание, что делать никогда ничего не надо.
Потому что если ты не будешь ничего делать сегодня, то завтра оно будет лучше работать само.
А если будешь что-то делать сегодня, то завтра оно перестанет работать.

В некоторых ситуациях бывает желательно, чтобы хорошо работало не только завтра, а, по возможности уже сегодня, хоть как-нибудь.
...
Рейтинг: 0 / 0
05.02.2017, 14:41
    #39398855
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
boobyВ некоторых ситуациях бывает желательно, чтобы хорошо работало не только завтра, а, по возможности уже сегодня, хоть как-нибудь.Это оправдание выдуманного тезиса.

А девиз "Давайте-ка я ускорю какую угодно вашу хрень" - это эникейный путь в ничто.
...
Рейтинг: 0 / 0
05.02.2017, 14:52
    #39398859
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по странному предикату в запросе
Elic,

разве бывает путь, который заканчивается чем-то таким разумным, которое отлично от ничто?

Миллиарды людей считают именно ничто единственной стоящей целью любого пути.
И всю жизнь готовят себя к тому, чтобы в нужный момент попасть именно в ничто, а не промахнуться и попасть куда-либо еще.

Насчет любой - да, это от узости кругозора.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по странному предикату в запросе / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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