[Python / MySQLdb] - CentOS - Linux - VPS
我有一个分析大文件的页面,每次运行最多可查询100次数据。数据库非常大,我正在尝试减少这个脚本的执行时间。
我的SQL函数在一个类中,当前连接对象是在实例化类时创建的类变量。我有各种fetch和query函数,每次调用时都会从连接对象创建一个游标。创建连接对象并重新使用它时创建游标会更快吗?或者每次调用它时创建游标会更好吗?
import MySQLdb as mdb
class parse:
con = mdb.connect( server, username, password, dbname )
#cur = con.cursor() ## create here?
def q( self, q ):
cur = self.con.cursor() ## it's currently here
cur.execute( q )
欢迎任何有关如何加速脚本的其他建议。 insert语句对于脚本中的所有查询都是相同的。
答案 0 :(得分:2)
打开和关闭连接永远不会自由,它总是会浪费一些性能。
你不想让连接保持打开的原因是,如果两个请求同时进入,第二个请求必须等到第一个请求完成才能完成任何工作。< / p>
解决此问题的一种方法是使用连接池。您创建了一堆打开的连接,然后重用它们。每次需要执行查询时,都要检查池中的连接,执行请求,然后将其放回池中。
设置所有这些可能非常繁琐,所以我建议使用SQLAlchemy。它内置connection pooling,开销相对较低,支持MySQL。
由于你关心速度,我只会使用SQLAlchemy的核心部分,因为ORM部分来得有点慢。