我有幾百萬元的行SQLite表:如何加快Python中的sqlite3查詢速度?
sqlite> create table t1(id INTEGER PRIMARY KEY,stuff TEXT);
我需要它的整數主鍵數億次查詢此表。我的代碼:
conn = sqlite3.connect('stuff.db')
with conn:
cur = conn.cursor()
for id in ids:
try:
cur.execute("select stuff from t1 where rowid=?",[id])
stuff_tuple = cur.fetchone()
#do something with the fetched row
except:
pass #for when id is not in t1's key set
這裏,ids是一個可能有數萬個元素的列表。形成t1並不需要很長時間(即每秒約75K插入)。以我所做的方式查詢t1是不可接受的慢(即10秒內〜1K查詢)。
我完全不熟悉SQL。我究竟做錯了什麼?
「我有一個數億行的sqlite表」。除非你絕對需要堅持SQLite,否則你應該放棄它並使用真正的數據庫。 SQLite並不是要有效處理這些數據量。 – kgr
有趣,有什麼建議嗎?我最初只是使用字典,但事實證明,我將有太多的數據,以適應內存。我認爲SQLite是最好的選擇。 – dranxo
我不想開始通常的爭論,但任何MySQL,PostgreSQL,MSSQL,Oracle都應該做得很好。重要的是,他們允許您調整其性能特徵,並將負載分散到多臺機器上。簡而言之,您擁有企業級數據量,因此您應該使用企業級數據庫引擎。如果你在Linux上,我推薦使用PostgreSQL,我用它來處理大型數據集,並且它工作正常。還有一本關於微調的好書 - http://www.amazon.com/PostgreSQL-High-Performance-Gregory-Smith/dp/184951030X(無隸屬關係) – kgr