2012-01-27 2 views
2

레일즈에서 add_index 메소드에 대해 읽었습니다. [:user_id, :created_at]이 다른 사람을 인덱싱되지 않은 이유를 전혀 모른다레일즈 애플리케이션에서 어떤 필드를 인덱스해야합니까?

class AddTitleToMicroposts < ActiveRecord::Migration 
    def change 
    create_table :microposts do |t| 
     t.string :title 
     t.string :content 
     t.integer :user_id 

     t.timestamps 
    end 
    add_index :microposts, [:user_id, :created_at] 
    end 
end 

: 튜토리얼에서

, 나는이 예제를 발견했다.

레일스 애플리케이션에서 어떤 필드를 색인화해야하는지 어떻게 알 수 있습니까?

답변

2

글쎄 그것은 당신의 응용 프로그램에 따라, 당신은 대부분 데이터베이스 성능을 향상시키기 위해 외래 키를 색인합니다. 예를 들어 다음 번에 사용자에게 속한 모든 마이크로 포스트를 검색하려고하면 user_id 색인이 사용되며 특정 시간에 작성된 모든 게시물을 검색 할 때마다 created_at 색인을 사용합니다. 인덱스는 기본적으로 쿼리의 속도를 높이므로 계속 쿼리 할 쿼리를 기반으로 인덱싱 할 수 있습니다.

+0

죄송합니다. 외래 키 **는 영어로 무엇입니까? – alexchenco

+0

외래 키는 테이블 외부의 테이블을 참조하는 키입니다. –

+1

관계를 유지 보수하기 위해 데이터베이스에서 사용하는 필드입니다. user_id는 마이크로 포스트와 사용자를 관련시키는 필드이므로 외래 키입니다. 필드 자체는 원하는 경우 포인터와 같으며 다른 테이블을 가리 킵니다. – daniel

1

나는 조인 테이블을 포함하여 belongs_to 관계가있는 모든 곳에서 해당 색인이 있어야한다고 말합니다. 어떤 사람들은 이것을 외부로 부를 수도 있지만, 색인 된 관계와 색인되지 않은 관계 사이의 성능 차이는 심오합니다.

따라서 User has_many Books 인 경우 마이 그 레이션에는 해당 줄 add_index: :books, :user_id이 있어야합니다. Book has_many AuthorsAuthor의 경우에도 의 has_many Books이있는 경우 BookAuthoring에 두 개의 인덱스가 있어야합니다. 하나는 author_id이고 다른 하나는 book_id입니다.

저는 레일스 성능 문제 중 90 %가 누락 된 색인에서 누락되었습니다.

0

나는 주로 외래 키와 검색 또는 정렬에 사용할 모든 다른 필드의 색인을 생성합니다. 그래서 당신이 알파벳 순서로 microposts를 보여주고 싶다면 나는 적어도 제목 필드에 열쇠를 추가 할 것입니다.

content 필드의 경우에 따라 다를 수 있습니다. 많은 텍스트가 포함되어있는 경우 간단한 정렬이나 검색은하지 않지만 전체 텍스트 검색을 원할 것입니다. 이 경우 일반 데이터베이스 색인은 큰 도움이되지 않으며 대신 전체 텍스트 검색 엔진을 사용해야합니다.

관련 문제