Sql 如何进一步优化此查询?

Sql 如何进一步优化此查询?,sql,mysql,query-optimization,Sql,Mysql,Query Optimization,stats和members表在id上有索引。但当我运行查询时,它会检查stats表中的所有行(在members表中,它只取一行)。你知道我做错了什么吗?谢谢。使用正确的ANSI-92连接语法-连接条件在ON子句中指定: SELECT mem.name, mem.regdate, stat.level FROM stats AS stat INNER JOIN members AS mem WHERE stat.id =

stats
members
表在
id
上有索引。但当我运行查询时,它会检查
stats
表中的所有行(在
members
表中,它只取一行)。你知道我做错了什么吗?谢谢。

使用正确的ANSI-92连接语法-连接条件在ON子句中指定:

    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']}
如果没有连接条件,MySQL将返回笛卡尔乘积,然后将WHERE子句应用于这些结果。几乎任何其他数据库都会告诉您所提供的查询存在语法错误


此外,
内部
关键字是可选的。

使用正确的ANSI-92连接语法-连接条件在ON子句中指定:

    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']}
如果没有连接条件,MySQL将返回笛卡尔乘积,然后将WHERE子句应用于这些结果。几乎任何其他数据库都会告诉您所提供的查询存在语法错误


另外,
internal
关键字是可选的。

尝试从主表(在本例中为members,I persume)中选择,并与stats连接以获取更多信息。使用ON可定义统计信息与成员的连接方式,并使用WHERE限制来自成员表的结果

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

因为它是一个内部联接,所以您也可以将其转过来(从统计数据中选择,在成员上联接),但考虑到您正在查看某个成员,这可能更有意义。

尝试从主表中选择(在本例中为members,I persume),并使用统计数据联接以获取更多信息。使用ON可定义统计信息与成员的连接方式,并使用WHERE限制来自成员表的结果

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

因为这是一个内部加入,所以你也可以改变它(从统计数据中选择,加入成员),但考虑到你关注的是某个成员,这可能更有意义。

如果你几周不编程,就会发生这种情况。。。ThanksIt仍然检查所有
stats
行,它可能是什么?@hey:
id
列是相应表的主键,对吗?CREATE TABLE语句和EXPLAIN PLAN output将有所帮助。如果我将此添加到where子句:
和stat.id=35
,那么它只检查两个表中的一行,因此每个索引都是正确的。这就是几周不编程时发生的情况。。。ThanksIt仍然检查所有
stats
行,它可能是什么?@hey:
id
列是相应表的主键,对吗?CREATE TABLE语句和EXPLAIN PLAN输出将有所帮助。如果我将此添加到where子句:
和stat.id=35
,则它只检查两个表中的一行,因此每个索引都是正确的。