更快的MySQL加入DISTINCT记录

时间:2010-09-01 14:22:20

标签: php mysql

在回顾相关问题之后,似乎没有一个问题可以解决我的问题,所以这里有:

我有两个包含课程信息的表格。一个表[课程]目前拥有近25k的记录,其中包括CourseName,CourseCode,Term,Instructor等字段。第二个表[courseCatalog]仅包含CourseCode和CourseName。

我的应用程序允许用户拉出教师并从允许他们教授的列表中批准课程。

我使用自动建议(jQuery Ajax对象 - > PHP文件 - > MySQL和返回)构建搜索以查找课程。当它们被返回时,用户可以单击要标记的课程(对PHP和MySQL的另一个Ajax调用),作为教师的批准课程。

问题是,较大的表中有一些课程不在较小的表中,反之亦然(根据数据的实际来源,消除该问题是一个更难的问题,我离题了)

如果我加入任何特定领域的表格,则会遗漏某些课程。 LEFT JOIN似乎仍然会产生同样的问题,因为我被迫加入一个字段。

如果我只是打电话给两个表:

SELECT DISTINCT course.CourseCode, course.CourseName
FROM course, courseCatalog

查询需要FOREVER,这会使搜索功能无效,因为加载建议需要很长时间。

我想按顺序获得一份DISTINCT课程列表,无论它们是出现在“课程”表还是“courseCatalog”表中......都非常匆忙:)

有什么建议吗?我忽略了一些简单的事情吗?谢谢大家

1 个答案:

答案 0 :(得分:2)

你说的查询永远是一个完全冗余的笛卡尔联接,你生成一大堆额外的行(当然行数乘以courseCatalog中的行数)然后再用DISTINCT删除它们留下course表的原始内容。 (与SELECT DISTINCT CourseCode, CourseName FROM course

的结果相同

要从两个表中获取不同的CourseCodes和CourseNames列表,您可以使用UNION运算符。

SELECT CourseCode, CourseName
FROM course
UNION /*Will ensure DISTINCTness*/
SELECT CourseCode, CourseName
FROM courseCatalog
ORDER BY CourseCode, CourseName