我使用pythons内置的sqlite3模块来访问数据库.我的查询执行150000个条目的表和40000个条目的表之间的连接,结果再次包含大约150000个条目.如果我在
SQLite Manager中执行查询需要几秒钟,但如果我从python执行相同的查询,它在一分钟后就没有完成.这是我使用的代码:
cursor = self._connection.cursor() annotationList = cursor.execute("SELECT PrimaryId,GOId " + "FROM Proteins,Annotations " + "WHERE Proteins.Id = Annotations.ProteinId") annotations = defaultdict(list) for protein,goterm in annotationList: annotations[protein].append(goterm)
我做了胎儿只是为了衡量执行时间.有没有人对性能的巨大差异有解释?我在Mac OS X 10.6.4上使用Python 2.6.1.
编辑
我手动实现了连接,这样可以更快地完成.代码如下所示:
cursor = self._connection.cursor() proteinList = cursor.execute("SELECT Id,PrimaryId FROM Proteins ").fetchall() annotationList = cursor.execute("SELECT ProteinId,GOId FROM Annotations").fetchall() proteins = dict(proteinList) annotations = defaultdict(list) for protein,goterm in annotationList: annotations[proteins[protein]].append(goterm)
因此,当我自己获取表格然后在python中进行连接时,大约需要2秒钟.上面的代码需要永远.我在这里错过了什么吗?
第二次编辑
我现在尝试使用apsw,它工作得很好(代码根本不需要改变),性能很棒.我仍然想知道为什么这对sqlite3模块这么慢.
这里有一个讨论:
http://www.mail-archive.com/python-list@python.org/msg253067.html
似乎sqlite3模块存在性能瓶颈.有一个advice如何使你的查询更快:
>确保您在连接列上有索引>使用pysqlite
原文地址:https://www.jb51.cc/sqlite/197865.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。