작성
·
579
1
강사님 안녕하세요! 제가 강의를 듣던중 is_public 필드에 db_index를 사용하는 이유를 잘 모르겠어서 서치를 해본결과 스택오버플로우에서 다음과 같은 답변이 있었습니다.
이 답변을 보고 db_index=True로 지정하면 데이터를 하나를 찾으면 검색을 멈춰 효율성을 올릴수 있다고 이해하였습니다. 그래서 여러 포스트에 대하여 is_public=True로 지정한후, GET 요청을 보내면 하나를 찾으면 검색이 멈춰 데이터 하나만 조회 되어야한다고 생각하고 테스트를 해본결과 is_public=True 인 모든 데이터가 조회되었습니다. 그레서 현재 db_index=True 인자가 어떤 역할을 하는것인지에 대한 혼란이 있습니다ㅠㅠ
답변 2
1
안녕하세요.
스크린샷으로 보여주신 내용은 unique=True 옵션을 지정할 때 db_index=True 옵션도 같이 지정하면 성능 상의 이점이 조금 있을 수 있다라는 내용입니다. 두 옵션은 별개의 옵션입니다.
모델 필드에 대한 db_index=True 지정은 모델을 활용한 마이그레이션 시에, 해당 컬럼에 대한 db index를 생성하도록 설정하는 옵션입니다.
영어사전으로 생각해보시면 사전에는 색인(index)이 있어서 단어 찾기가 편리하죠. 색인(index)이 없다면 내가 원하는 단어를 찾기 위해서 사전 처음부터 끝까지 하나하나 살펴봐야할 것입니다. 색인이 있기에 빠르고 정확하게 내가 원하는 단어를 찾을 수 있는 것이죠.
데이터베이스에서 어떤 데이터를 찾을 때에 조회조건으로 지정되는 컬럼은 색인이 생성된 컬럼인 것이 조회 성능이 훨씬 나을 수 있습니다. 색인이 없어도 조회가 될 것이지만 테이블 전체를 다 뒤져야합니다. 이를 Full table scan이 발생한다라고 이야기합니다. 데이터가 적을 때에는 잘 느끼지 못하지만, 데이터가 많아질 수록 성능 저하가 급격하게 발생합니다.
구글에서 "데이터베이스 색인" 으로 검색해보시면 다양한 포스팅들을 확인하실 수 있으실 것입니다.
화이팅입니다. :-)
0