1
我有以下各表數據庫:優化SQL語句一個大表
Courses(course varchar(10));
Prerequisite(course varchar(10), prereq varchar(10));
StudentRecord(student varchar(10), course varchar(10), PRIMARY KEY (student, course));
課程保存在數據庫中的所有課程。先決條件包含給定課程的所有先決條件。 StudentRecord保存所有完成給定課程的學生。
我想出了下面的查詢發現,一個學生可以根據對他/她已經完成的先決條件課程:
SELECT DISTINCT s.student, c.course from StudentRecord s, Courses c
WHERE NOT EXISTS(SELECT * FROM Prerequisite p where p.course = c.course AND
p.prereq NOT IN(SELECT course from StudentRecord
WHERE student = s.student))
AND NOT EXISTS(SELECT * FROM StudentRecord s2 WHERE
s2.student = s.student AND s2.course = c.course);
這個查詢做什麼它應該返回課程列表學生可以根據完成的先決條件進行學習。但是,當「StudentRecord」是一個包含超過500個條目的大型表格時,我的查詢窒息並且需要永久運行。是否有另一種查詢運行速度更快?我可以優化當前查詢以更快運行嗎?任何幫助表示讚賞。
500+行構成了一個非常小桌子在我書。特別是如果只有2列。 100萬行將是一個大型的桌子。另外,你使用的是mysql還是sqlite? – BobbyScon
這也是我的想法。我認爲這個查詢可以處理500多行,但它不能。我試圖找到重寫查詢的替代方法,但似乎無法完成。我正在使用sqlite。 – user3385373
您定義了哪些索引? – EJP