2

[Python/MySQLdb] - CentOS - Linux - VPS

我有一个页面可以解析一个大文件,每次运行最多查询 100 次数据。数据库非常大,我正在尝试减少此脚本的执行时间。

我的 SQL 函数在一个类中,当前连接对象是类实例化时创建的类变量。我有各种获取和查询函数,每次调用它们时都会从连接对象创建一个游标。在创建连接对象并重用它时创建游标会更快,还是在每次调用游标时创建游标会更好?

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 )

也欢迎任何其他关于如何加快脚本速度的建议。对于脚本中的所有查询,插入语句都是相同的。

4

1 回答 1

2

打开和关闭连接从来都不是免费的,它总是会浪费一些性能。

您不想让连接保持打开状态的原因是,如果两个请求同时进入,第二个请求必须等到第一个请求完成后才能执行任何工作。

解决此问题的一种方法是使用连接池。您创建了一堆打开的连接,然后重用它们。每次您需要进行查询时,您都会检查池外的连接,执行请求,然后将其放回池中。

设置所有这些可能非常乏味,所以我建议使用SQLAlchemy。它内置了连接池,开销相对较低,并且支持 MySQL。

由于您关心速度,我只会使用 SQLAlchemy 的核心部分,因为 ORM 部分的速度要慢一些。

于 2012-10-16T00:54:29.233 回答