[解決済み] Ruby on Railsで複数カラムのインデックスを作成する。
2022-09-11 12:05:17
質問
ユーザーがどの記事を読んだかを追跡する機能を実装しています。
create_table "article", :force => true do |t|
t.string "title"
t.text "content"
end
ここまでが私のマイグレーションです。
create_table :user_views do |t|
t.integer :user_id
t.integer :article_id
end
user_views テーブルは常に両方のカラムを探すためにクエリされ、決して一方だけを探すことはありません。私の質問は、私のインデックスがどのように見えるべきかということです。これらのテーブルの順序に違いはありますか、それにいくつかのより多くのオプションがあるべきですか、または何か。私のターゲットDBはPostgresです。
add_index(:user_views, [:article_id, :user_id])
ありがとうございます。
UPDATEです。
両方のカラムに同じ値を含む1つの行だけが存在することができるので(user_id HAS read article_idを知ることから)、私は :unique オプションを考慮すべきでしょうか?私が間違っていなければ、それは私が自分自身でチェックを行う必要がなく、ユーザーが記事を訪問するたびに挿入を行うだけでよいことを意味します。
どのように解決するのですか?
インデックス作成には順序が重要です。
- 最も選択的なフィールド、つまり行数を最も速く絞り込むフィールドを最初に置く。
-
インデックスは、そのカラムを順番に使用する限りにおいてのみ、使用されます。
から始まる
...すなわち、もしインデックスを
[:user_id, :article_id]
に対してインデックスを作成すれば、以下のような高速なクエリを実行できます。user_id
またはuser_id AND article_id
には適用されませんがarticle_id
.
マイグレーション
add_index
の行は次のようなものになるはずです。
add_index :user_views, [:user_id, :article_id]
unique」オプションに関する質問
Railsでこれを行う簡単な方法として
validates
をスコープとしたモデルで
uniqueness
を次のように指定します (
ドキュメント
):
validates :user, uniqueness: { scope: :article }
関連
-
[解決済み] Ruby on Railsのデータベースをパージまたは再作成する
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyで乱数を取得する方法
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み】Railsの認証トークンを理解する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み】PG::ConnectionBad: fe_sendauth: パスワードが供給されない
-
[解決済み] heroku open - no app specified
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] AWS S3です。アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレスされている必要があります。
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] railsで':remote => true'はどのように動作するのでしょうか?
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
-
[解決済み] Ruby on Railsのマイグレーションで、カラムをユニークにしてインデックスを作成するにはどうすればよいですか?