[SQL] 왜 PostgreSQL는 작은 테이블에 내 인덱스를 사용하지 않는?
SQL왜 PostgreSQL는 작은 테이블에 내 인덱스를 사용하지 않는?
나는 PostgreSQL을에 다음과 같은 테이블이 있습니다 :
CREATE TABLE index_test
(
id int PRIMARY KEY NOT NULL,
text varchar(2048) NOT NULL,
last_modified timestamp NOT NULL,
value int,
item_type varchar(2046)
);
CREATE INDEX idx_index_type ON index_test ( item_type );
CREATE INDEX idx_index_value ON index_test ( value )
나는 다음과 같은 선택을합니다
explain select * from index_test r where r.item_type='B';
explain select r.value from index_test r where r.value=56;
실행 계획의 설명은 다음과 같습니다 :
Seq Scan on index_test r (cost=0.00..1.04 rows=1 width=1576) Filter: ((item_type)::text = 'B'::text)'
지금까지 내가 이해, 이것은 전체 테이블 스캔입니다. 질문 : 내 인덱스를 사용하지 않는 이유는 무엇입니까?
할 수있다, 그 이유는 내가 내 테이블에 너무 적은 수의 행을 가지고있다? 나는 20 그 있습니다. 당신은 쉽게 인덱스의 문제를 확인하기 위해 임의의 데이터 내 테이블을 채울 수있는 SQL 문을 알려 주시기 바랍니다
이 기사 발견 : http://it.toolbox.com/blogs/db2luw/how-to-easily-populate-a-table-with-random-data-7888를,하지만 나를 위해 작동하지 않습니다. 명령문의 효율 만 단순 중요하지 않습니다.
해결법
-
==============================
1.예. 테이블에서 20 행의 총에 대한 서열 검사는 항상 빠르고 인덱스 스캔보다 더 될 것입니다. 기회는 서열 검사는 단일 I / O 작업을해야하므로 해당 행은, 어쨌든 하나의 데이터베이스 블록에 위치하는 점이다.
예. 테이블에서 20 행의 총에 대한 서열 검사는 항상 빠르고 인덱스 스캔보다 더 될 것입니다. 기회는 서열 검사는 단일 I / O 작업을해야하므로 해당 행은, 어쨌든 하나의 데이터베이스 블록에 위치하는 점이다.
당신이 사용하는 경우
explain (analyze true, verbose true, buffers true) select ....
당신은 정말 무슨 일이 일어나고 있는지에 대해 좀 더 자세한 내용을 볼 수 있습니다.
BTW : 그 포스트 그레스의 데이터 타입 (및 예약어) 또한 당신은 열 이름과 같은 텍스트를 사용하지 말아야합니다.
-
==============================
2.당신이 발견 한 예는 당신이 그것을 할 generate_series를 사용하여 페이지에서, DB2를위한 것입니다. 이 같은 예를 들어 :
당신이 발견 한 예는 당신이 그것을 할 generate_series를 사용하여 페이지에서, DB2를위한 것입니다. 이 같은 예를 들어 :
INSERT INTO index_test(data,last_modified,value,item_type) SELECT md5(random()::text),now(),floor(random()*100),md5(random()::text) FROM generate_series(1,1000); SELECT max(value) from index_test;
http://sqlfiddle.com/#!12/52641/3
위의 바이올린의 두 번째 쿼리는 검색 인덱스를 사용한다.
from https://stackoverflow.com/questions/15474812/why-is-postgresql-not-using-my-indexes-on-a-small-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 다음은 크게 쿼리 시간을 증가에 가입합니까? (0) | 2020.06.19 |
---|---|
[SQL] 데이터베이스 내부에 저장된 모든 이미지를 표시하는 방법 (0) | 2020.06.19 |
[SQL] 어떻게 웹 브라우저에서 오디오 및 비디오 파일을 재생하려면? (0) | 2020.06.18 |
[SQL] JPA 기본 쿼리는 반환 개체하지만 역 참조 클래스 캐스트 예외가 발생 가입 (0) | 2020.06.18 |
[SQL] 어떻게 "유산"외부 왼쪽 오라클에 문을 가입 변환합니까? (0) | 2020.06.18 |