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
,则它只检查两个表中的一行,因此每个索引都是正确的。