올바른 인덱싱에 대해 의심 스럽습니다. Posgresql을 사용하여 레일 3.2.13을 사용합니다. BTW, 아마 더 관계형 데이터베이스/색인 질문 ...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 항목 evey 년, 즉 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
012,351
나는 이러한 쿼리의 종류를 확인해야합니다 6,
또는 : 몇 즉
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) 이미 표시된 것처럼 단일 열에 인덱스를 설정했습니다. 맞습니다 ? 맞아
add_index :exams, [:annoaccademico, :corsolaurea, :cognomenome]
add_index :exams, [:annoaccademico, :corsolaurea, :matricola]
: 3) 아마도 나는 두 개의 멀티 컬럼 인덱스처럼 추가 할 필요가?
나에게 분명하지 않은 점은 다음과 같습니다. 선택 조건을 제외하고, 인덱스는 order by 절에도 유용합니까?
양해 해 주셔서 감사합니다/db/sql 통찰력. giorgio solyaris.altervista.org
위와 같은 식에 인덱스를 사용하려면 cognomenome) 그런 다음 해당 표현식에 대한 색인을 작성해야합니다 (예 : "CREATE INDEX ON films ((lower (title));" –
각 쿼리의 실행 계획을 확인하십시오 ('explain analyze select ... '사용). 도움이 될 것으로 생각되는 inddexes를 추가 한 다음 실행 계획을 다시 확인하십시오. 인덱스의 작동 방식에 대한 좋은 소개는 다음을 참조하십시오. http://use-the-index-luke.com –