gpt4 book ai didi

mysql - Rails 数据库性能调优

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:42 24 4
gpt4 key购买 nike

目前我经常使用一个非常大的 mysql2 数据库,虽然我已经为我认为合适的字段建立了索引,但某些查询的返回时间非常慢。

我有两个导致问题的模型,CommentCommenter

现在,CommenterComment 之间存在has_many 关系,但我的查询依赖于找到每个 Comment 的 Commenter 的用户名。所以我会运行这样的东西:

c = Blog.first.comments ##this bit runs fine, I indexed the "blog_id" field on Comments
c.collect {|c| c.commenter.username}

为了帮助解决速度问题,我在 Comment 模型的 commenter_id 字段上创建了一个索引。但它仍然运行得很慢..

有谁知道我可以做些什么,这将有助于提高查询速度?

最佳答案

当您想查找给定 commenter_id 的评论时,commenter_id 上的索引会有所帮助(“找到 joe 发表的所有评论”)。

但是当您执行 c.commenter 时,您正在搜索用户,大概是 id 等于评论的 commenter_id 的用户。 id 列上应该已经有一个索引。万无一失的方法是采用实际生成的 sql 语句(在开发中,这些语句在 development.log 中),并对其使用解释,例如

explain select * from comments where id = 12345

鉴于您不太可能设法创建一个在其 id 列上没有索引的表,最有可能的罪魁祸首是急切加载 - 如果一篇帖子有 500 条评论,那么上面的代码将获取一个一个关联的用户,以及到数据库的 500 次往返加起来

c.includes(:commenter).collect {...}

c.eager_load(:commenter).collect {...}

将解决这个问题(上面的代码片段假定您使用的是 Rails 3)。

关于mysql - Rails 数据库性能调优,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8561213/

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