我运行完全相同的 Python 函数,一个作为 PostgreSQL PL/Python,另一个在 PostgreSQL 之外作为常用的 Python 脚本。
令人惊讶的是,当我使用 调用 PostgreSQL PL/Pythonselect * from pymax7(20000);
时,平均需要 65 秒,而当我调用通常的 Python 脚本python myscript.py 20000
时,平均需要 48 秒。运行查询和脚本 10 次计算平均值。
应该预期这样的差异吗?PostgreSQL RDBMS (PL/Python) 内部的 Python 在性能方面与外部的 Python 相比如何?
我在 Ubuntu 12.04 64 位上运行 PostgreSQL 9.1 和 Python 2.7。
PostgreSQL PL/Python:
CREATE FUNCTION pymax7 (b integer)
RETURNS float
AS $$
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987)
return a
$$ LANGUAGE plpythonu;
Python:
import time
import sys
def pymax7 (b):
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987) # keeping Python busy
return a
def main():
numIterations = int(sys.argv[1])
start = time.time()
print pymax7(numIterations)
end = time.time()
print "Time elapsed in Python:"
print str((end - start)*1000) + ' ms'
if __name__ == "__main__":
main()