У меня очень простая небольшая база данных, 2 таблицы:
Узел (Node_ID, Node_name, Node_Date
): Node_ID - первичный ключ
Цитирование (Origin_Id, Target_Id
): PRIMARY KEY (Origin_Id, Target_Id)
каждый является FK в узле
Теперь я пишу запрос, который сначала находит все цитаты, что их Origin_Id имеет конкретную дату, а затем я хочу узнать, каковы целевые даты этих записей.
Я использую sqlite в python, таблица Node имеет 3000 записей, Citation содержит 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, поэтому внутреннее соединение должно быть довольно быстрым, но это не так!