adodb: บันทึกทดสอบ Benchmark
Submitted by wd on Sun, 2007-03-18 23:15
ลองทดสอบวัดประสิทธิภาพแบบคร่าว ๆ เพื่อหาวิธีการเขียนโค๊ด
เริ่มต้นด้วยการสร้างคลาสเพื่อจับเวลาก่อน
class TimeIt: import time def __init__(self): self.p_start=time.time() def use(self): t_now=time.time() t_use=t_now-self.p_start self.p_start=t_now return t_use
ตามด้วยการสั่งจากเชลล์ของไพธอน
import adodb conn = adodb.NewADOConnection("postgres") cur = conn.Connect(host, user, password, db) sql = """CREATE TABLE test (wordid SERIAL, word VARCHAR(255), PRIMARY KEY (wordid))""" cur = conn.Execute(sql)
แบบที่ ๑
def f1(): ttt = TimeIt() for i in range(1000): sql = """INSERT INTO test (word) VALUES ('abc%s')""" % (i,) cur = conn.Execute(sql) sql = """SELECT wordid FROM test WHERE word=%s""" % (conn.qstr(i),) cur = conn.Execute(sql) print ttt.use() sql = """DELETE FROM test""" cur = conn.Execute(sql)
ได้ผลเป็น
>>> f1() 9.27473306656 >>> f1() 9.16922688484 >>> f1() 9.21483206749 >>> f1() 9.20028710365 >>> f1() 10.2529239655 >>> f1() 9.16449689865
แบบที่ ๒
def f2(): ttt = TimeIt() for i in range(1000): sql = """INSERT INTO test (word) VALUES ('abc%s'); \ SELECT wordid FROM test WHERE word=%s""" % (i, conn.qstr(i),) cur = conn.Execute(sql) print ttt.use() sql = """DELETE FROM test""" cur = conn.Execute(sql)
ได้ผลเป็น
>>> f2() 9.11072301865 >>> f2() 9.20462703705 >>> f2() 9.24071407318 >>> f2() 9.25392103195 >>> f2() 9.02831697464 >>> f2() 9.07160282135 >>>
แบบที่ ๓
def f3(): def get_id(word): sql = """SELECT wordid FROM test WHERE word=%s""" % (conn.qstr(word),) cur = conn.Execute(sql) return cur.fields[0] def add_word(word): sql = """INSERT INTO test (word) VALUES (%s)""" % (conn.qstr(word),) cur = conn.Execute(sql) return get_id(word) ttt = TimeIt() for i in range(1000): add_word("abc%s" % (i,)) print ttt.use() sql = """DELETE FROM test""" cur = conn.Execute(sql)
ได้ผลเป็น
>>> f3() 9.02051997185 >>> f3() 9.06975603104 >>> f3() 9.30845808983 >>> f3() 9.06503009796 >>> f3() 9.89376401901 >>> f3() 9.28391385078 >>>
แบบที่ ๔
def f4(): def add_word(word): sql = """INSERT INTO test (word) VALUES (%s)""" % (conn.qstr(word),) cur = conn.Execute(sql) return cur ttt = TimeIt() for i in range(1000): add_word("abc%s" % (i,)) print ttt.use() sql = """DELETE FROM test""" cur = conn.Execute(sql)
ได้ผลเป็น
>>> f4() 8.93194293976 >>> f4() 8.94240808487 >>> f4() 9.14316105843 >>> f4() 8.93977403641 >>> f4() 9.05243611336 >>> f4() 9.06761908531 >>>
สรุป
ความเร็วแทบไม่ต่างกันเลย ฉะนั้น เขียนให้อ่านง่าย ปรับปรุงง่าย ดีที่สุด
ค้างทดสอบ (รอ postgres-8.2)
def fx(): ttt = TimeIt() for i in range(1000): sql = """INSERT INTO test (word) VALUES ('abc%s') RETURNING \ (SELECT wordid FROM test WHERE word=%s)""" % (i, conn.qstr(i),) cur = conn.Execute(sql) print ttt.use() sql = """DELETE FROM test""" cur = conn.Execute(sql)
RETURNING
มีใช้ใน Oracle กับ Postgres-8.2.3
- Printer-friendly version
- Log in or register to post comments
- 3726 reads
Recent comments