MYSQL查询 - 加入或循环查询

时间:2013-08-06 15:02:57

标签: mysql join database-performance

所以我正在使用数据库中的几个表,我想知道查询它的最佳方法。

以下是设置:

EVENTS:
int event_id
varchar event_name
date event_date

ATTENDANCE:
int attendance_id
int event_id (foreign key for EVENTS)
int user_id (foreign key for USERS)
int status

USERS:
int user_id
varchar first_name
varchar last_name
varchar email

我要做的事情,就是有一个我想要出席的事件(ID#),然后在出勤表中查询与该事件匹配的所有记录,然后查询所有用户表作为该事件的一部分参与的用户。

首先想到的是首先在数据库中查询所有出勤条目并获取数组,然后遍历每条记录以查询用户信息。然而,这看起来非常低效,并且必须有更好的方式来加入或类似的东西。我没有太多关于加入的经验,所以我想知道我是否能得到一些帮助。

这是我最初想的伪代码:

SELECT * FROM attendance WHERE event_id = eventID
while (row exists):
    SELECT FROM users WHERE user_id = attendanceUserID
    get info export in xml...etc.

我不认为这是最好的方法,那么更好的方法是什么呢?

1 个答案:

答案 0 :(得分:0)

问题是“加入还是循环?”技术答案是使用连接。您所描述的是联接的意图,在条件上组合表。

“从...中选择(选择更多)”不是解决问题的方法。考虑一下这个想法“这两个表格以完全可靠和可识别的方式连接它们的方式是什么?上面评论中的注释是现实。

然而,作为一个“老人”,问题并不那么简单。一切都是时间问题,你的和机器的问题。所以问问自己:想象方法A的效率是方法B的100倍。但是,你已经知道如何做方法B.并且...差异是0.02毫秒而不是2毫秒。 (我们假设您有一个小型数据集和一台快速机器。)如果您可以在三分钟内编写方法B并继续您的项目,那可能会很好。特别是如果有一个截止日期。因为从一个工作示例开始,一切都变得更容易,即使以不同的方式实现。它为您提供了一些测试您正在学习的新方法的东西。很多人甚至在知道它是否重要之前追逐效率。

让事情先行,让它们更快。 (当然,不要把自己描绘成一个可怕的设计角落。你还没有,数据库很好,你只是在寻找不同的方法来获取信息。)