我運行完全相同的Python函數,一個作爲PostgreSQL PL/Python,另一個作爲通常的Python腳本運行在PostgreSQL之外。令人驚訝的是,當我使用select * from pymax7(20000);
調用PostgreSQL PL/Python時,平均需要65秒,而當我調用通常的Python腳本python myscript.py 20000
時,平均需要48秒。計算平均值運行查詢和腳本10次。在性能方面,PostgreSQL PL/Python如何與Python之外的Python進行比較?
應該有這樣的區別嗎?在性能方面,PostgreSQL RDBMS(PL/Python)中的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()
與其他PL語言的比較會更公平。 –
由於PL/x調用x(x = Python; Perl;等)的解釋器,估計PL/x對x有多少開銷,這不是一個有趣的比較嗎?除非我錯過了什麼? –
它不會調用解釋器可執行文件,它會使用嵌入機制(在Python的情況下,動態鏈接到python庫,我猜)綁定目標語言。 –