0

我有表格:产品、子类别和类别。Categories 有很多 Sub_Categories,Sub_Categories belongs_to Categories 有很多产品,产品属于 sub_categories。我的产品表有一个 sub_category_id;我的 sub_category 表有一个 category_id。索引这些表以增加应用程序加载时间的最有效方法是什么?

4

3 回答 3

1

如果没有更多信息,为了更好地访问您的查询,您将索引这些:

categories on id
subcategories on id
subcategories on category_id
product on id
product on sub_category_id
于 2012-06-07T00:35:01.263 回答
1

您也可以使用急切加载。例如,如果您需要一个类别和几个子类别,请在更少的数据库查询中加载所有内容

Category.includes(:sub_categories).find(:id)

. 请参阅http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

于 2012-06-07T00:39:18.187 回答
0

Anil 的回答是正确的,但正如他所暗示的那样,您的问题太模糊了。我建议打开查询日志,并查看哪些查询在页面加载中占用了时间。然后进行有问题的查询,并输入EXPLAIN {query}mysql 提示符(您可以使用rails dbconsole或 Oracle 提供的独立 mysql 客户端访问)。查看瓶颈查询中使用的索引,并提出更具体的问题。

我猜您的很多查询都是按类别 ID 查询产品。将索引的 category_id 列添加到 Products 可能会通过避免加入来加快速度,但您有责任保持该列是最新的。

于 2012-06-07T00:41:27.043 回答