ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 외래키 필드에 인덱스를 수동으로 추가해야합니까? 아니면 Rails가 자동으로 수행합니까?
    카테고리 없음 2020. 8. 16. 14:29

    질문

    외래 키 필드에 적용된 인덱스가 응용 프로그램 속도 성능에 얼마나 중요한지에 대해 읽었지만 이를 설정하는 방법에 대한 모순된 설명도 읽었습니다. 아래 내 모델 및 마이그레이션 파일에 표시된 구조에서 :

    class Owner < ApplicationRecord
      has_many :dogs
    end
    
    class Dog < ApplicationRecord
      belongs_to :owner
    end
    
    create_table :owners do |t|
      t.string :full_name
      t.string :address
      t.timestamps
    end
    
    create_table :dogs do |t|
      t.string :name
      t.string :age
      t.string :breed
      t.references :owner, foreign_key: true
      t.timestamps
    end

    내 외래키 필드를 선언하는 줄에서 :

    t.references :owner, foreign_key: true

    이렇게 두면 Rails가 자동으로 데이터베이스 색인을 생성합니까? 아니면 아래 코드를 표시하도록 줄을 수정하여 수동으로 추가해야합니까?

    t.references :owner, foreign_key: true, index: true

    또는 수동으로 색인을 추가해야하는 경우 별도의 코드 블록에서 add_index 메소드를 사용하여 선언해야합니까? 다음 중 index : true 의 요점은 무엇입니까?

    Rails 5.1.4를 사용하고 있습니다.

     

    답변1

    예, 참조를 사용하면 색인이 이미 생성되어 있습니다. 이것을 테스트하려면 :

    1. Foo 모델 레일
    2. rails g model Bar foo : references및 생성 된 마이그레이션 살펴보기 :

       class     CreateBars     <     ActiveRecord   ::   마이그레이션   [  5.1  ]      def   변경    create_table   :   바   실행     |   t   |        t  .   참조   :   foo  ,   foreign_key   :     참        t  .   타임 스탬프      종료      종료    종료 
    3. rake db : migrate

    4. db / schema.rb 를보십시오 :

       ActiveRecord   ::   스키마  .   정의   (  버전   :     20180201075841  < span class = "pun">)     실행    create_table   "bars" ,   force   :     :   캐스케이드   실행     |   t   |      t  .   정수   "foo_id"     t  .   날짜 시간   "created_at" ,   null   :     거짓      t  .   날짜 시간   "updated_at" ,   null   :     거짓      t  .   색인   [ "foo_id " ],   이름   :  < span class = "pln">   "index_bars_on_foo_id"     종료    create_table   "foos" ,   force   :     :   캐스케이드   실행     |   t   |      t  .   날짜 시간   "created_at" ,   null   :     거짓      t  .   날짜 시간   "updated_at" ,   null   :     거짓      종료    종료 

    색인이 생성되었음을 보여주는 t.index [ "foo_id"], name : "index_bars_on_foo_id" 행이 있음을 알 수 있습니다.

    기본 동작 인 경우 index : true 의 요점이 무엇인지 모르지만 여기서 아이디어를 던지면 옵션이있을 수 있으므로 비활성화 할 수 있습니다.



     

     

     

     

    출처 : https://stackoverflow.com/questions/48557560/do-i-need-to-manually-add-indexes-to-my-foreign-key-fields-or-does-rails-do-it-a

    댓글

Designed by Tistory.