[英]How to optimize this query more?
SELECT mem.name,
mem.regdate,
stat.level
FROM stats AS stat
INNER JOIN members AS mem
WHERE stat.id = mem.id
AND mem.ref = {$members['id']}
stats
和members
表的索引为id
。 但是,当我运行查询时,它会检查stats
表中的所有行(在members
表中只需要一行)。 有什么想法我做错了吗? 谢谢。
使用正确的ANSI-92 JOIN语法-在ON子句中指定了JOIN标准:
SELECT mem.name,
mem.regdate,
stat.level
FROM stats AS stat
JOIN members AS mem ON mem.id = stat.id
WHERE mem.ref = {$members['id']}
如果没有JOIN条件,MySQL将返回笛卡尔乘积,然后将WHERE子句应用于这些结果。 几乎所有其他数据库都会告诉您,您提供的查询存在语法错误。
另外, INNER
关键字是可选的。
尝试从主表中选择(在这种情况下,我认为是成员),并加入具有统计信息的统计信息以获取更多信息。 使用ON定义统计信息如何连接到成员,并使用WHERE限制成员表的结果。
SELECT mem.name, mem.regdate, stat.level
FROM members AS mem
INNER JOIN stats AS stat
ON stat.id = mem.id
WHERE mem.ref = {$members['id']}
由于它是一个INNER JOIN,因此您也可以将其翻转(从统计数据中选择,加入成员),但是考虑到您正在寻找某个成员,这可能更有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.