我想运行各种选择查询 1 亿次,我有大约。表中有 100 万行。因此,我正在寻找运行所有这些选择查询的最快方法。
到目前为止,我已经尝试了三种不同的方法,结果都差不多。
下面的三种方法当然没有做任何有用的事情,纯粹是为了比较性能。
第一种方法:
for i in range (100000000):
cur.execute("select id from testTable where name = 'aaa';")
第二种方法:
cur.execute("""PREPARE selectPlan AS
SELECT id FROM testTable WHERE name = 'aaa' ;""")
for i in range (10000000):
cur.execute("""EXECUTE selectPlan ;""")
第三种方法:
def _data(n):
cur = conn.cursor()
for i in range (n):
yield (i, 'test')
sql = """SELECT id FROM testTable WHERE name = 'aaa' ;"""
cur.executemany(sql, _data(10000000))
And the table is created like this:
cur.execute("""CREATE TABLE testTable ( id int, name varchar(1000) );""")
cur.execute("""CREATE INDEX indx_testTable ON testTable(name)""")
我认为使用准备好的语句功能确实可以加快查询速度,但由于这似乎不会发生,所以我认为您可以给我一些其他方法的提示。
最佳答案
这种基准不太可能产生任何有用的数据,但第二种方法应该是最快的,因为一旦语句准备好,它就会被数据库服务器存储在内存中。重复查询的进一步调用不需要传输查询文本,因此节省了一点时间。
这可能没有实际意义,因为查询非常小(可能与重复发送查询文本时通过网络传输的数据包数量相同),并且查询缓存将为每个请求提供相同的数据。
关于python - 为数百万数据运行选择查询的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595071/