gpt4 book ai didi

sqlite - 如何优化sql查询使其更快

转载 作者:行者123 更新时间:2023-12-02 01:19:53 24 4
gpt4 key购买 nike

我有一个非常简单的小型数据库,其中 2 个表是:

节点(Node_ID、Node_name、Node_Date):Node_ID 为主键
Citation (Origin_Id, Target_Id) : PRIMARY KEY (Origin_Id, Target_Id) 每个在节点中都是 FK

现在我编写一个查询,首先查找 Origin_Id 具有特定日期的所有引文,然后我想知道这些记录的目标日期是多少。

我在Python中使用sqlite,节点表有3000条记录,引文有9000条记录,我的查询在函数中是这样的:

def cited_years_list(self, date):
c=self.cur
try:
c.execute("""select n.Node_Date,count(*) from Node n INNER JOIN
(select c.Origin_Id AS Origin_Id, c.Target_Id AS Target_Id, n.Node_Date AS
Date from CITATION c INNER JOIN NODE n ON c.Origin_Id=n.Node_Id where
CAST(n.Node_Date as INT)={0}) VW ON VW.Target_Id=n.Node_Id
GROUP BY n.Node_Date;""".format(date))
cited_years=c.fetchall()
self.conn.commit()
print('Cited Years are : \n ',str(cited_years))
except Exception as e:
print('Cited Years retrival failed ',e)
return cited_years

然后我在某些特定年份调用此函数,但它太慢了wwwwwwwww :( (特定年份大约 1 分钟)虽然我的查询工作正常,但速度很慢。您能给我一个建议,让它更快吗?如果有任何关于优化此查询的想法,我将不胜感激:)

我还应该提到,我在 Origin_Id 和 Target_Id 上有索引,因此内部联接应该非常快,但事实并非如此!!!

最佳答案

如果此脚本运行一段时间,您可以考虑将数据库加载到内存中。由于您似乎在使用 python 进行编码,因此有一个名为 connection.backup 的连接函数可以将整个数据库备份到内存中。由于内存比磁盘快得多,因此这应该会提高速度。当然,这对优化语句本身没有任何作用,因为我没有足够的代码来评估您正在使用代码做什么。

关于sqlite - 如何优化sql查询使其更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com