gpt4 book ai didi

MySQL 连接检查每一行

转载 作者:可可西里 更新时间:2023-11-01 08:37:26 24 4
gpt4 key购买 nike

我网站上的这个查询需要很长时间才能执行。我的网站上有一个博客和一个论坛,它们松散地集成在一起,因此每个论坛帐户在博客上都有一个帐户,反之亦然。但是,每个表中的 user_id 并不相关,因此我一直通过用户名加入它们。

SELECT *
FROM comments AS c
INNER JOIN articles AS a ON c.article_id = a.article_id
INNER JOIN user_profiles AS p ON c.user_id = p.user_id
INNER JOIN blog_users AS b ON c.user_id = b.user_id
INNER JOIN forum_users AS f ON b.username = f.username
WHERE a.article_id = :article_id
ORDER BY c.comment_id DESC
LIMIT 0 , 30

当我在查询中使用 explain 时,我看到最后一个连接正在检查 forum_users 表中的每一行以得出超过 1,000,000 行的结果。两个表的用户名列都被索引并且所有表都是 InnoDB。作为解决方法,我将每个用户的论坛 user_id 存储在 blog_users 表中,反之亦然,这样我就可以直接加入 user_id,这样查询运行得更快,但我想尽可能避免这样做。有没有一种方法可以重新处理查询,使用户名连接更有效?

最佳答案

表格和列字符集是否相同?比如utf8的blog_users和latin1的forum_users?如果它们不相同,mysql 将不会使用这些索引。您可以更改字符集,例如:

ALTER TABLE blog_users 转换为字符集 utf8

如果这是问题所在,请在执行此操作之前仔细阅读文档。它可以更改列的内容。 http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

关于MySQL 连接检查每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862498/

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