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
- 답변 # 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
관련 자료
- performance - MYSQL 테이블의 여러 인덱스가 느린 UPDATES 및 INSERTS의 원인입니까?
- python - 중복 인덱스가 있고 Pandas에서 집계 함수가없는 피벗 테이블
- sql server - 인덱스와 대용량 데이터가있는 테이블에서 자주 DML 작업을 수행하면 SELECT 쿼리 성능에 영향을 줍니까?
- sql server - 클러스터형 인덱스에 1 페이지 만있는 테이블에 비 클러스터형 인덱스가있는 이유가 있습니까?
- ruby - Items 테이블과 관련된 Rails 6 테이블 연결 사용자 테이블
- activerecord - 레일 - 왼쪽 조인 테이블을 사용하여로드를 늘리는 방법?
- 서로 다른 모델의 참조 열이 다른 단일 테이블 상속
- 레일 - 다른 테이블에 연결된 한 테이블의 컨텐츠를 표시하려고합니다
- 레일 - model 메소드에 동일한 이름의 테이블 필드 사용 이 작동 할 수 있습니까?
- Rails MySQL 활성 레code 시간대가 인식되지 않음
- ActiveRecord::Relation의 모든 관련 객체를 가져오는 Rails 방법이 있습니까?
- [Rails][Postgres] 카테고리의 대부분의 게시물을 기준으로 사용자를 정렬하는 방법은 무엇입니까?
- Rails -임시 테이블을 만들고 운영하시겠습니까?
- 특정 속성이 유효한 ruby on rails인지 확인하는 방법
- 레일에 트리거와 유사한 기능을 도입하는 모범 사례
- Rails에서 처리하기 위해 선택한 파일 이름을 컨트롤러에 전달하는 방법
- Rails 컬렉션에서 중첩된 모든 앨범 또는 컬렉션 찾기
- 하나의 쿼리에서 개체의 사용자 가져오기
- Mysql이 설치되지 않음 -RoR과 함께 사용하려고 함
와이즈 비즈
이 열에서 정렬 속도가 빨라지기 때문에 더 좋습니다. 외래 키는 많이 검색되는 항목입니다.
레일 버전 5부터 인덱스가 자동으로 생성됩니다. 자세한 내용은 여기를 참조하십시오.
와이즈 비즈아니요, 이것은 이미 레일로 이루어졌습니다
와이즈 비즈아니요, 위와 같습니다
와이즈 비즈 와이즈 비즈 , 무슨 일이야? 이것은 각 키에 대한 색인을 추가하는 것과 어떻게 다릅니 까? 그런 다음 인덱스는 두 열의 결합 된 인덱스입니다. 하나의 에 대한 모든 항목을 원하지 않으면 의미가 없습니다. 그리고하나의 ( 여야합니다.