繁体   English   中英

如何进一步优化此查询?

[英]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']}

statsmembers表的索引为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM