相关疑难解决方法(0)

为什么STRAIGHT_JOIN如此大幅度地改进了这个查询,以及在SELECT关键字之后编写它意味着什么?

我有以下MySql查询:

select t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = t2.CommonID
where t1.FilterID = 1
Run Code Online (Sandbox Code Playgroud)

运行大约需要30秒,这很奇怪,因为如果我注释掉连接或where子句,它需要不到一秒钟:即

select t1.*
from Table1 t1
where t1.FilterID = 1
Run Code Online (Sandbox Code Playgroud)

要么

select t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = t2.CommonID
Run Code Online (Sandbox Code Playgroud)

每个不到一秒钟.

然后是STRAIGHT_JOIN关键字,我可以在这里找到一个参考:http: //dev.mysql.com/doc/refman/5.0/en/join.html

STRAIGHT_JOIN类似于JOIN,只是左表始终在右表之前读取.这可以用于连接优化器以错误顺序放置表的那些(少数)情况.

什么?我可以写:

select t1.*
from Table1 t1
STRAIGHT_JOIN  Table2 t2
on t1.CommonID = t2.CommonID
where t1.FilterID = 1
Run Code Online (Sandbox Code Playgroud)

并且查询在不到一秒的时间内执行.

更奇怪的是,我可以写:

select STRAIGHT_JOIN  t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = …
Run Code Online (Sandbox Code Playgroud)

mysql join

53
推荐指数
1
解决办法
2万
查看次数

标签 统计

join ×1

mysql ×1