我有表: Products,Sub_Categories和Categories。Categories拥有许多Sub_Categories、sub_categories belongs_to类别,并且有许多产品和产品属于Sub_Categories。我的products表有一个sub_category_id;我的sub_category表有一个category_id。索引这些表以增加应用程序加载时间的最有效方法是什么?
发布于 2012-06-07 08:35:01
在没有更多信息的情况下,为了更好地访问查询,您可以对以下内容进行索引:
categories on id
subcategories on id
subcategories on category_id
product on id
product on sub_category_id发布于 2012-06-07 08:39:18
您也可以使用急切加载。例如,如果您需要一个类别和几个子类别,则使用
Category.includes(:sub_categories).find(:id)。参见http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations。
发布于 2012-06-07 08:41:27
阿尼尔的答案是正确的,但正如他暗示的那样,你的问题太模糊了。我建议打开查询日志,看看哪些查询占用了页面加载的时间。然后获取有问题的查询,并在mysql提示符中输入EXPLAIN {query} (您可以使用rails dbconsole或Oracle提供的独立mysql客户端来访问)。查看瓶颈查询中使用的索引,并提出更具体的问题。
我猜您的很多查询都是按类别ID查询产品的。向products添加一个带索引的category_id列可能会通过避免连接来加快速度,但是您有责任保持该列是最新的。
https://stackoverflow.com/questions/10924088
复制相似问题