gpt4 book ai didi

mysql - 为什么这个简单的 SQL 查询会在一个简单的 6k 记录表上造成严重滞后?

转载 作者:行者123 更新时间:2023-12-01 00:49:28 25 4
gpt4 key购买 nike

所以我有 2 个表,一个名为 user,另一个名为 user_favoriteuser_favorite 存储一个itemIduserId,用于存储用户收藏的项目。我只是想找到那些没有user_favorite 中有记录的用户,这样我就可以找到那些还没有收藏任何东西的用户。

出于测试目的,我在 user 中有 6001 条记录,在 user_favorite 中有 6001 条记录,因此只有一条记录没有任何收藏。

这是我的查询:

  SELECT u.* FROM user u
JOIN user_favorite fav ON u.id != fav.userId
ORDER BY id DESC

这里最后一句中的id没有歧义,它指的是user表中的id。我在 u.id 上有一个 PK 索引,在 fav.userId 上有一个索引。

当我运行此查询时,我的计算机变得没有响应并完全死机,并且没有给出任何输出。我有 2gb RAM,不是一台很棒的计算机,但我认为它应该能够轻松处理像这样具有 6k 条记录的查询。

两个表都在 MyISAM 中,这可能是问题所在吗?切换到 INNODB 会解决这个问题吗?

最佳答案

让我们首先讨论您的查询(如所写)在做什么。由于 on 子句中的 !=,您正在将每条用户记录与其他用户的每条收藏夹连接起来。所以你的查询将产生大约 3600 万行。这不会给你你想要的答案。它解释了为什么您的计算机不快乐。

您应该如何编写查询?您可以使用三种主要模式。我认为这是一个很好的解释:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/并专门讨论了 mysql 上下文中的性能。它还向您展示了如何查看和阅读执行计划,这对于优化查询至关重要。

关于mysql - 为什么这个简单的 SQL 查询会在一个简单的 6k 记录表上造成严重滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636997/

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