gpt4 book ai didi

MySQL 优化 - 遍历整个表以查找 WHERE foo IN 子选择?

转载 作者:行者123 更新时间:2023-11-29 07:03:52 25 4
gpt4 key购买 nike

为了学习 MySQL (innodb),我正在尝试编写一个包含 3 个表的 Twitter 应用程序:users2、follow2 和 tweets2。

如下解释显示 tweets2 中的所有行都可能被触及。这是准确的吗?如果你打算做一个 WHERE username IN (select) 我会假设给定的用户名被索引 MySQL 将检索 sub-select 子句并直接转到 tweets2 中具有这些用户名的行。

explain select username, timestamp, tweet
from tweets2
where username in
(select followee from follow2 where follower='user1')
order by timestamp desc;

这是创建表的 SQLAlchemy 代码:

    users = Table('users2', metadata,
Column('username', String(16), index=True),
Column('email', String(256)),
)
follow = Table('follow2', metadata,
Column('follower', String(16), index=True),
Column('followee', String(16), index=True),
)
tweets = Table('tweets2', metadata,
Column('id', Integer, primary_key=True),
Column('username', String(16), index=True),
Column('timestamp', BigInteger),
Column('tweet', String(200)),
)

最佳答案

MySQL 中,IN 子句中的 select 语句将始终被驱动(尽管可能仍会在其上使用索引)。

将其替换为 JOIN:

SELECT  username, timestamp, tweet
FROM follow2 f
JOIN tweets2 t
ON t.username = f.followee
WHERE f.follower = 'user1'
ORDER BY
timestamp DESC

关于MySQL 优化 - 遍历整个表以查找 WHERE foo IN 子选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com