我对正确的索引有疑问。我使用rails 3.2.13,后面使用Posgresql。顺便说一句,也许更多的是关系型数据库/索引的问题...使用Rails/Postgresql索引多列索引
我有这个表:
# 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)
我想查询数千记录表(记录的nymber逐年增加呈线性,说年减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
总是我必须列命令: annoaccademico递减 corsolaurea cognomenome
我的问题:
1)考虑到表的大小,你是否建议使用索引? 2)如所示,我已经在单列上设置索引;这是正确的? 3)也许我需要添加两个多列索引,如:
add_index :exams, [:annoaccademico, :corsolaurea, :cognomenome]
add_index :exams, [:annoaccademico, :corsolaurea, :matricola]
这是正确的?
对我来说不是很清楚的是: 除了选择条件,索引是否对order by子句有用?
非常感谢您的耐心/我的db/sql ingnorance。 giorgio solyaris.altervista.org
如果你想能够使用表达式上的索引像upper(那么你必须创建该表达式的索引:例如“CREATE INDEX ON films((lower(title)));” – 2013-05-04 07:54:58
查看每个查询的执行计划(使用'explain analyze select ...')。添加您认为可能有用的inddex,然后再次检查执行计划。有关索引如何工作的详细介绍,请参阅以下链接:http://use-the-index-luke.com – 2013-05-04 15:38:04