0

Products、Sub_Categories、および Categories というテーブルがあります。カテゴリには、多くの Sub_Categories、Sub_Categories belongs_to カテゴリがあり、多くの製品と製品が 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

熱心な読み込みを使用することもできます。たとえば、カテゴリといくつかのサブカテゴリが必要な場合は、次のように、より少ない db クエリですべてをロードします。

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 に答える