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

Откуда:
Сообщений: 3721
В одной биллинговой системе разработчики используют запрос примерно такого вида:
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 


Мне этот фрагмент непонятен:

AND ct.mnemonic = 'postpaid'
AND m.charge_type_id <> ct.charge_type_id

Чем он может быть вызван?
Разработчик просто ошибся или это такой косвенный способ подсказки оптимизатору?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
3 фев 17, 22:14    [20179358]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Alibek B.,

скорее всего, какой-то предикат джойна еще потеряли
4 фев 17, 00:42    [20179749]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Почему?
Просто в отчет включаются все виды (оплаты?) кроме 'postpaid'
4 фев 17, 08:14    [20179889]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Alibek B.
Member

Откуда:
Сообщений: 3721
Вячеслав Любомудров
Просто в отчет включаются все виды (оплаты?) кроме 'postpaid'

Но почему таким странным способом?
Почему не

AND m.charge_type_id = ct.charge_type_id
AND ct.mnemonic != 'postpaid'
?
4 фев 17, 10:59    [20180010]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Например есть еще mnemonic IS NULL и он тоже должен участвовать в выборке
Сделай два плана и сравни, в конце концов, делов-то
4 фев 17, 11:08    [20180028]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Elic
Member

Откуда:
Сообщений: 29979
Alibek B.
Но почему таким странным способом?
Почему не
Смахивает на крипто-программирование: чтоб сопровожденцы не догадались.
Я бы подобную мысль формулировал через NOT IN.
4 фев 17, 13:25    [20180214]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54381
Elic
Alibek B.
Но почему таким странным способом?
Почему не
Смахивает на крипто-программирование: чтоб сопровожденцы не догадались.
Я бы подобную мысль формулировал через NOT IN.
когда сопровождаешь систему, которую 40 человек писали 15 лет, то понимаешь - чем проще и понятнее, тем лучше. Я тоже написал бы через NOT IN
4 фев 17, 17:29    [20180673]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
booby
Member

Откуда:
Сообщений: 2254
я бы такое точно не писал бы через not in

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


Но, конечно, получающиеся планы хотелось бы видеть глазом, хотя бы невооружённым,
и полные определения таблиц.
5 фев 17, 13:19    [20181452]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Elic
Member

Откуда:
Сообщений: 29979
booby
У меня бы рука не поднялась написать здесь Not in
Хозяин - барин.
booby
и полные определения таблиц.
Кто как девицу видит, тот так её и танцует.

P.S. Кто-то обобщает на будущее, а кто-то зачем-то пялится в планы.
5 фев 17, 13:46    [20181473]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
booby
Member

Откуда:
Сообщений: 2254
Elic,

на будущее исходный вариант уже обобщен, способом неотличимым от NOT IN.
Вопрос в том, что надо иметь в голове, чтобы видеть будущее с не уникальным ct.mnemonic
5 фев 17, 13:59    [20181482]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Elic
Member

Откуда:
Сообщений: 29979
booby
что надо иметь в голове, чтобы видеть будущее с не уникальным ct.mnemonic
Бизнес требования или способы их реализации меняются. И мнемоника может стать перечислением. Но жажда планов (накуя?) мешает об этом задуматься.
5 фев 17, 14:13    [20181491]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
booby
Member

Откуда:
Сообщений: 2254
booby
...

на будущее исходный вариант уже обобщен, способом неотличимым от NOT IN.
...

пожалуй так:
способом, вероятно лучшим, чем not in, по крайней мере на сегодня.
5 фев 17, 14:25    [20181501]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
booby
Member

Откуда:
Сообщений: 2254
Elic
...
Бизнес требования или способы их реализации меняются. И мнемоника может стать перечислением.

В таком будущем сегодняшний NOT IN не отличим от сегодняшнего скалярного подзапроса.

Elic
Но жажда планов (накуя?) мешает об этом задуматься.

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

В некоторых ситуациях бывает желательно, чтобы хорошо работало не только завтра, а, по возможности уже сегодня, хоть как-нибудь.
5 фев 17, 14:31    [20181507]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
Elic
Member

Откуда:
Сообщений: 29979
booby
В некоторых ситуациях бывает желательно, чтобы хорошо работало не только завтра, а, по возможности уже сегодня, хоть как-нибудь.
Это оправдание выдуманного тезиса.

А девиз "Давайте-ка я ускорю какую угодно вашу хрень" - это эникейный путь в ничто.
5 фев 17, 14:41    [20181513]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по странному предикату в запросе  [new]
booby
Member

Откуда:
Сообщений: 2254
Elic,

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

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

Насчет любой - да, это от узости кругозора.
5 фев 17, 14:52    [20181526]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить