正しい索引付けに疑問があります。私は Rails 3.2.13 を使用し、背後で Posgresql を使用しています。ところで、おそらくリレーショナルデータベース/インデックス作成の質問...
私はこのテーブルを持っています:
# Table name: exams
#
# id :integer not null, primary key
# cognomenome :string(255)
# matricola :string(255)
# corsolaurea :string(255)
# annoaccademico :string(255)
# blablabla
#
# Indexes
#
# index_exams_on_annoaccademico (annoaccademico)
# index_exams_on_cognomenome (cognomenome)
# index_exams_on_corsolaurea (corsolaurea)
# index_exams_on_matricola (matricola)
何千ものレコードテーブルにクエリを実行したいと思います(レコードの数は毎年直線的に増加します。たとえば、毎年500アイテムずつ、つまり10年で5000〜6000になります)。
私はこれらの種類のクエリを作成する必要があります:
SELECT "exams".* FROM "exams" WHERE (upper(cognomenome) like '%GIORGIO%') ORDER BY annoaccademico desc, corsolaurea, cognomenome LIMIT 50 OFFSET 0
またはその:
SELECT "exams".* FROM "exams" WHERE (matricola like '%8327483274%') ORDER BY annoaccademico desc, corsolaurea, cognomenome LIMIT 50 OFFSET 0
またはその:
SELECT "exams".* FROM "exams" WHERE (annoaccademico = '2013') AND (upper(cognomenome) like '%GIORGIO%') ORDER BY annoaccademico desc, corsolaurea, cognomenome LIMIT 50 OFFSET 0
またはその:
SELECT "exams".* FROM "exams" WHERE (corsolaurea = 'Infermieristica') AND (upper(cognomenome) like
'%GIORGIO%') ORDER BY annoaccademico desc, corsolaurea, cognomenome LIMIT 50 OFFSET 0
またはその:
SELECT "exams".* FROM "exams" WHERE (corsolaurea = 'Medicina-Anatomia I' and annoaccademico = '2013') AND (upper(cognomenome) like '%GIORGIO%') ORDER BY annoaccademico desc, corsolaurea, cognomenome LIMIT 50 OFFSET 0
簡単に言えば、列 annoaccademico corsolaurea cognomenome matricola のいくつかの AND の組み合わせを使用して、テーブルをクエリします。
常に列ごとに並べる必要があります: annoaccademico desc corsolaurea cognomenome
私の質問:
1) テーブルのサイズを考慮して、とにかくインデックスを使用することをお勧めしますか? 2)示されているように、私はすでに単一の列にインデックスを設定しています。そのとおりです ?3) おそらく、次のような 2 つの複数列インデックスを追加する必要があります。
add_index :exams, [:annoaccademico, :corsolaurea, :cognomenome]
add_index :exams, [:annoaccademico, :corsolaurea, :matricola]
それは正しい ?
私にはあまり明確ではないのはポイントです:別の選択条件、インデックスは order by 句にも役立ちますか?
あなたの忍耐に感謝します/私のdb / sql無知。ジョルジオ・ソリャリス.altervista.org