我对正确的索引有疑问。我使用rails 3.2.13,后面使用Posgresql。 BTW,可能更多关系数据库/索引问题...
我有这张桌子:
# 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线性增加,比如evey年的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
简而言之,我使用一些AND组合列来查询表 annoaccademico corsolaurea cognomenome matricola
总是我必须按列排序: annoaccademico desc corsolaurea cognomenome
我的问题:
1)考虑到表格大小,您是否建议使用索引? 2)如图所示我已在单列上设置索引;那是对的吗? 3)可能我需要添加两个多列索引,如:
add_index :exams, [:annoaccademico, :corsolaurea, :cognomenome]
add_index :exams, [:annoaccademico, :corsolaurea, :matricola]
那是对的吗?
对我来说不太清楚的是: 除了选择条件,索引是否也适用于order by子句?
非常感谢您的耐心/我的db / sql无知。 乔治 solyaris.altervista.org
答案 0 :(得分:1)
我喜欢你,而不是数据库的极客。这就是我在经历这类问题时所做的事情:
当然,您需要完成代码并填写数据库
这是我正在使用的脚本(你只需要卷曲)
#!/bin/bash
time (for ((i=0; i<100;i++)); do curl -s -o /dev/null http://127.0.0.1:3000/my_page; done)
所以我的答案是:测试它,这种情况取决于你的应用和你的数据,所以唯一的方法就是测试它