Действительно ли Аналитические функции Oracle являются дорогостоящими?

Лучший способ пройти прокси, который требует аутентификации, использует urllib2 для создания пользовательского новичка URL, затем с помощью этого для выполнения всех запросов, Вы хотите пройти прокси. Отметьте, в частности, Вы, вероятно, не хотите встраивать пароль прокси в URL или исходный код Python (если это не просто быстрый взлом).

import urllib2

def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_mgr.add_password(None, proxyurl, proxyuser, proxypass)

    proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)

    return urllib2.build_opener(proxy_handler, proxy_auth_handler)

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 4:
        url_opener = get_proxy_opener(*sys.argv[1:4])
        for url in sys.argv[4:]:
            print url_opener.open(url).headers
    else:
        print "Usage:", sys.argv[0], "proxy user pass fetchurls..."

В более сложной программе, можно разделить эти компоненты как соответствующие (например, только с помощью одного менеджера паролей в течение времени жизни приложения). Документация Python имеет [еще 112] примеры того, как сделать сложные вещи с urllib2, который Вы могли бы также найти полезным.

10
задан onejigtwojig 23 September 2009 в 16:08
поделиться

3 ответа

аналитические функции не лишены затрат: они должны хранить данные для промежуточных результатов (промежуточные итоги, оконные функции ...), для которых требуется память, а также они требуют некоторой вычислительной мощности. Некоторым функциям потребуется перейти к последней строке набора результатов, чтобы иметь возможность возвращать результат (например, MIN / MAX). Большинство функций также будут иметь неявную операцию SORT.

Поэтому они не являются бесплатными с точки зрения ресурсов, но являются операциями SET, и поэтому в большинстве случаев они намного эффективнее, чем написание пользовательской процедуры plsql построчно или традиционный SQL.

Вам придется сравнивать и тестировать тесты в вашем конкретном случае, но если вы будете использовать их с умом, вы увидите, что они являются мощным инструментом повышения производительности, а не помехой.

6
ответ дан 4 December 2019 в 00:25
поделиться

Некоторые подробности об этом доступны в блоге Джонатана Льюиса здесь .

. На самом деле вопрос должен заключаться в том, являются ли они более или менее дорогостоящими, чем альтернатива, и это будет зависеть от конкретной ситуации. В некоторых случаях вы можете предпочесть вытащить данные на сервер приложений и обработать их там только потому, что обычно дешевле / проще иметь дополнительное оборудование на этом уровне.

Но есть выбор между выполнением этого в SQL и добавлением PL / Обработка SQL,

3
ответ дан 4 December 2019 в 00:25
поделиться

Это зависит от того, как индексируется ваша таблица и какие функции вы используете.

ROW_NUMBER () , например, кажется менее эффективным, чем ROWNUM , даже если используются индексы. См. Эту статью в моем блоге для сравнения производительности:

Оптимизатор Oracle знает о оконных функциях и может использовать несколько приемов, например STOPKEY и PUSHED RANK , которые делают их более эффективными.

План объяснения указывает, что полное сканирование таблицы выполняется для таблицы, для которой использовалась аналитическая функция оракула. ​​

Само по себе сканирование таблицы неплохое.

2
ответ дан 4 December 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: