代码之家  ›  专栏  ›  技术社区  ›  d2burke

更快的MySQL连接以获得不同的记录

  •  3
  • d2burke  · 技术社区  · 15 年前

    在回顾了相关的问题之后,似乎没有一个能解决我的问题,所以下面是:

    我有两张包含课程信息的表格。目前,一个表[course]保存了近25k条记录,其中包含CourseName、CourseCode、Term、讲师等字段。第二个表[courseCatalog]仅保存CourseCode和CourseName。

    我的应用程序允许用户调出一个讲师,并从允许他们授课的列表中批准课程。

    我用auto-suggest(jQuery-Ajax-Object->PHP-file->MySQL和back)构建了一个搜索来查找课程。返回后,用户可以单击课程,将其标记为讲师认可的课程(对PHP&MySQL的另一个Ajax调用)。

    如果我加入任何特定领域的表格,某些课程就会被遗漏。左连接似乎仍然产生相同的问题,因为我被迫加入一个领域。

    如果我简单地调用两个表:

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

    查询将花费很长时间,这使得搜索功能变得无用,因为加载建议需要很长时间。

    我想按顺序得到一个清晰的课程列表,不管它们是出现在“课程”表还是“课程目录”表中……非常匆忙:)

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Martin Smith    15 年前

    您所说的永远需要的查询是执行一个完全冗余的笛卡尔连接,在这个连接中,您生成了一大堆额外的行(courseCatalog中的行数乘以courseCatalog中的行数),然后使用 DISTINCT course 桌子。(结果与 SELECT DISTINCT CourseCode, CourseName FROM course )

    要从这两个表中获得CourseCodes和CourseName的不同列表,可以使用 UNION 接线员。

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