MySQL 5.1.73左连接超时
我在本地使用mysql 5.7.28,一切正常,但在5.1.73的开发服务器上,我的请求超时(+2mn) 请求很简单,但我不明白为什么它不起作用MySQL 5.1.73左连接超时,mysql,performance,timeout,left-join,mysql-5.1,Mysql,Performance,Timeout,Left Join,Mysql 5.1,我在本地使用mysql 5.7.28,一切正常,但在5.1.73的开发服务器上,我的请求超时(+2mn) 请求很简单,但我不明白为什么它不起作用 SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.id = t2.id 奇怪的是,如果我换t1和t2,它工作得很好。 如果我使用内部连接,它工作得很好。 如果我这样做: SELECT t1.* FROM t1 WHERE t1.id NOT IN ( SELECT t1.id FROM t1 INNER JOIN
SELECT t1.*
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
奇怪的是,如果我换t1和t2,它工作得很好。
如果我使用内部连接,它工作得很好。
如果我这样做:
SELECT t1.*
FROM t1
WHERE t1.id
NOT IN (
SELECT t1.id
FROM t1
INNER JOIN t2 ON t1.id = t2.id)
它不起作用了
t1.id和t2.id都有索引。
t1.id可以为NULL,t2.id不能(但在localhost中也是如此??)
如果你知道为什么这不起作用,请随时帮助我:D
表:
T1:
////////////////////
T2:
谢谢 在复杂查询中两次使用同一个表时,为每个实例指定不同的别名。重复使用
t1
会让我感到困惑,可能会让解析器感到困惑
如果希望t1中的行不在t2中,请使用以下模式:
SELECT ...
FROM t1
LEFT JOIN t2 ON t2.foo = t1.foo
WHERE t2.id IS NULL; -- Note
避免不在(选择…)
;它可能优化得很差
请提供SHOW CREATE TABLE
,以便我们了解在nom
上重复索引是否是故意的(例如索引
和全文
)
它不起作用了
超时?错误的结果?结果太多了?结果太少
在5.1和5.7之间增加了很多优化;这可能解释了“超时”的原因。在复杂查询中使用同一个表两次时,为每个实例指定不同的别名。重复使用
t1
会让我感到困惑,可能会让解析器感到困惑
如果希望t1中的行不在t2中,请使用以下模式:
SELECT ...
FROM t1
LEFT JOIN t2 ON t2.foo = t1.foo
WHERE t2.id IS NULL; -- Note
避免不在(选择…)
;它可能优化得很差
请提供SHOW CREATE TABLE
,以便我们了解在nom
上重复索引是否是故意的(例如索引
和全文
)
它不起作用了
超时?错误的结果?结果太多了?结果太少
在5.1和5.7之间增加了很多优化;这可以解释“超时”的原因。好的,我解决了这个问题 t1.id是拉丁语,t2.id是utf8。。。。
将两者都更改为相同的,并且是即时的 好的,我解决了这个问题 t1.id是拉丁语,t2.id是utf8。。。。
将两者都更改为相同的,并且是即时的 这是我的第一个请求,第二个请求的
不在
中,应该做与左连接完全相同的事情。。。其中t2.id不为NULL
。我在原来的帖子中通过SHOW CREATE TABLE进行了更改。不工作=像第一个一样超时是的。这是我的第一个请求,带有不在的第二个请求应该做与左连接完全相同的事情。。。其中t2.id不为NULL
。我在原来的帖子中通过SHOW CREATE TABLE进行了更改。不工作=像第一个一样超时是的。这可能会导致非常缓慢的加入!这可能会导致非常缓慢的加入!
SELECT ...
FROM t1
LEFT JOIN t2 ON t2.foo = t1.foo
WHERE t2.id IS NULL; -- Note