>

Rails 데이터베이스에 대해 질문이 있습니다.

  • "xxx_id"와 같은 모든 외래 키에 "index"를 추가해야합니까?
  • 자동으로 생성 된 "id"열에 "index"를 추가해야합니까?
  • 자동으로 생성 된 "id"열에 "index (unique)"를 추가해야합니까?

  • 한 번에 두 개의 외래 키에 인덱스를 추가하면 ( add_index (:users, [:category, :state_id]) , 무슨 일이야? 이것은 각 키에 대한 색인을 추가하는 것과 어떻게 다릅니 까?

    class CreateUsers < ActiveRecord::Migration
      def self.up
        create_table :users do |t|
          t.string :name
          t.integer :category_id 
          t.integer :state_id
          t.string :email
          t.boolean :activated
          t.timestamps
        end
      # Do I need this? Is it meaningless to add the index to the primary key?
      # If so, do I need :unique => true ?
      add_index :users, :id 
      # I don't think I need ":unique => true here", right?
      add_index :users, :category_id # Should I need this?
      add_index :users, :state_id # Should I need this?
      # Are the above the same as the following?
      add_index (:users, [:category, :state_id])
      end
    end
    
    

<시간>

지금까지 좋은 답변. 추가 질문.

  • xxx_id에 "고유 인덱스"를 추가해야합니까?
  • 답변 # 1

    와이즈 비즈

    이 열에서 정렬 속도가 빨라지기 때문에 더 좋습니다. 외래 키는 많이 검색되는 항목입니다.

    레일 버전 5부터 인덱스가 자동으로 생성됩니다. 자세한 내용은 여기를 참조하십시오.

    와이즈 비즈

    아니요, 이것은 이미 레일로 이루어졌습니다

    와이즈 비즈

    아니요, 위와 같습니다

    와이즈 비즈 와이즈 비즈 , 무슨 일이야? 이것은 각 키에 대한 색인을 추가하는 것과 어떻게 다릅니 까?

    그런 다음 인덱스는 두 열의 결합 된 인덱스입니다. 하나의

    Should I add "index" to all the foreign keys like "xxx_id"?

    에 대한 모든 항목을 원하지 않으면 의미가 없습니다.  그리고하나의

    Should I add "index" to the automatically created "id" column?

     (

    Should I add "index(unique)" to the automatically created "id" column?

    여야합니다.  

    If I add index to two foreign keys at once ( 가 아님 )와 동시에

    이와 같은 색인은 다음 요청 속도를 높입니다.

    add_index (:users, [:category_id, :state_id])
    
    

    어디

    category_id
    
    

    이러한 요청 속도가 빨라집니다 :

    state_id
    
    

    와이즈 비즈

    아니요. 이렇게하면 한 명의 사용자 만 한 범주에 속할 수 있지만 범주의 의미는 더 많은많은사용자를 한 범주에 넣을 수 있다는 것입니다. 당신의 category_id 에서  이 category 같은 것을 가지고 모델  그리고 당신의 카테고리 모델에서 # rails 2 User.find(:all, :conditions => { :state_id => some_id, :category_id => some_other_id }) # rails 3 User.where(:state_id => some_id, :category_id => some_other_id) 와 같은 것 . add_index :users, :category_id add_index :users, :state_id 가 있다면  Wyzwyz의 관계  필드는 고유하지 않아야합니다!

    자세한 내용은 tadman의 훌륭한 답변을 참조하십시오.

  • 답변 # 2

    인덱싱은 까다 롭고 미묘한 일이지만 사용할 규칙을 결정할 수있는 일반적인 규칙이 있습니다. 훨씬 쉬워졌습니다.

    먼저 기억해야 할 것은 인덱스는 여러 가지 방법으로 작동 할 수 있다는 것입니다. A, B, C의 인덱스는 A, B 및 단순히 A에도 작동하므로 인덱스를 올바르게 주문하면 인덱스를보다 다양한 용도로 사용할 수 있습니다. 전화 번호부는 성, 이름으로 색인되어 있으므로 성이나 이름과 성의 조합으로 사람들을 쉽게 찾을 수 있습니다. 그러나 이름으로 직접 조회 할 수는 없습니다. 별도의 색인이 필요합니다. 전화 번호도 마찬가지입니다. 색인도 만들어야합니다.

    그 점을 염두에두고 인덱스를 작성하는 방법을 지시하는 많은 것들이 있습니다 :

    # rails 2+3 User.find_by_category_id(some_id) User.find_by_state_id(some_other_id) # or # rails 2 User.find(:all, :conditions => {:category_id => some_id}) User.find(:all, :conditions => {:state_id => some_other_id}) # rails 3 User.where(:category_id => some_id) User.where(:state_id => some_other_id) 가있는 경우 -

    I should add "index with unique" for xxx_id, right?

     관계 페어링을하려면 외래 키에 대한 색인이 있어야합니다.

    레코드를 주문할 때 많은 수의 페이지가 매겨 질 경우 해당 주문 열을 색인 끝에 추가해야합니다.

    User 가있는 경우  관계의 경우, 조인 테이블에는 복합 키로서의 조인에 관련된 두 속성에 대한 고유 인덱스가 있어야합니다.

    사용자 이름 또는 이메일과 같은 고유 식별자를 사용하여 직접 레코드를 가져 오는 경우 고유 인덱스 여야합니다.

    belongs_to :category 에서 레코드 세트를 가져 오는 경우  범위를 사용하는 관계, has_many :users 를 포함하는 색인이 있는지 확인하십시오.  외래 키 및 범위 열을 순서대로

    인덱스의 목표는 데이터가 올바르게 인덱싱되지 않을 때 발생하는 두려운 "테이블 스캔"또는 "파일 정렬"작업을 제거하는 것입니다.

    간단히 말하면, 애플리케이션에서 생성되는 쿼리를보고 has_many 에서 참조 된 열을 확인하십시오.  또는 foreign_key  조건과 belongs_to  절은 순서대로 표시됩니다.

  • 답변 # 3

    항상 외래 키 색인 생성

    주문할 색인 열 항상

    모든 고유 필드 (데이터베이스 레벨에서 고유성을 보장합니다. 마이그레이션 예 : has_many )

    예를 들어 두 가지로 주문하거나 두 가지로 검색하는 경우 : 와이즈 비즈  또는 has_many :through 그러면 이중 색인이 필요합니다 :

    콘크리트 예 :

    있다면 :

    has_many
    
    

    추가해야합니다 :

    has_many
    
    

    참고 : 색인은 디스크에서 추가 공간을 차지하며 각 색인을 다시 작성해야하기 때문에 각 레코드를 작성하고 업데이트하는 속도가 느려집니다.

    크레딧 :

    https://tomafro.net/2009/08/using-indexes-in-rails-choosing-additional-indexes, rails-created_at 주문시 사용자, 인덱스를 테이블에 추가해야합니까? 위.

    WHERE

  • 이전 survey - USB 드라이브에는 어떤 개발 도구가 있습니까?
  • 다음 macos - mysql 사용자가 user/local/mysql/data 디렉토리를 소유하고 있지 않다는 경고