Postgresql SQL 문장의 효율적인 작업 보기
2473 단어 PostgresqlSQL 문능률
설명 구문:
explain select … from … [where ...]
예:
explain select * from dual;
여기에는 다음과 같은 간단한 예가 있습니다.
EXPLAIN SELECT * FROM tenk1;
QUERY PLAN
----------------------------------------------------------------
Seq Scan on tenk1 (cost=0.00..458.00 rows=10000 width=244)
EXPLAIN에서 참조하는 데이터는 다음과 같습니다.
1). 예상 시작 비용(출력 스캐닝이 시작되기 전에 소모되는 시간, 예를 들어 하나의 정렬 노드에서 줄을 잇는 시간).
2). 예상 총비용.
3). 예상된 이 계획 노드의 출력 행수
4). 예상 계획 노드의 행 평균 너비 (바이트) 입니다.
이 비용 (cost) 의 계산 단위는 디스크 페이지의 접근 수량입니다. 예를 들어 1.0은 순서대로 디스크 페이지를 읽을 것입니다.그 중에서 상부 노드의 지출은 그 모든 하위 노드의 지출을 포함할 것이다.이곳의 출력 줄 수 (rows) 는 노드 처리/스캐닝을 계획하는 줄 수가 아닙니다. 보통 더 적습니다.일반적으로 맨 윗줄의 예상 수량은 실제 되돌아오는 줄 수를 조회하는 데 더 가깝다.
이제 시스템 테이블 기반 질의를 수행합니다.
SELECT relpages, reltuples FROM pg_class WHERE relname = 'tenk1';
검색 결과에서 알 수 있듯이tenk1표는 358개의 디스크 페이지와 10000개의 기록을 차지하고 있으나,cost의 값을 계산하기 위해서는 다른 시스템의 매개 변수 값을 알아야 한다.
postgres=# show cpu_tuple_cost;
cpu_tuple_cost
----------------
0.01
(1 row)
cost = 458( ) + 10000( ) * 0.01(cpu_tuple_cost
추가:postgresql SQL COUNT(DISTNCT FIELD) 최적화배경
특정 시간대 키워드의 모든 총수를 통계하고null(statistics는 400w+의 데이터가 있고 표 크기는 600M)을 포함하기 때문에
sql 쓰기:
select count(distinct keyword) +1 as count from statistics;
문제
백그라운드 조회지만 너무 느려요. 집행시간이 38.6s인데 어떻게 최적화하나요?
해결하다
방법 1 (치수)
이 시간을 정해서 실행하고 sql 결과를 캐시합니다. 그리고 프로그램이 캐시 결과에 접근하면 페이지 접근이 빨라지지만 본질적으로 sql 실행이 느린 문제를 해결하지 못했습니다.
방법 2 (근본 치료)
sql를 최적화하려면 우선count(distinct FIELD)가 왜 이렇게 느린지 말해 보세요. 여기는 더 이상 설명하지 않겠습니다. 이 편을 보십시오https://www.jb51.net/article/65680.htm
컨텐츠 최적화:
select count( distinct FIELD ) from table
로 수정
select count(1) from (select distinct FIELD from table) as foo;
비교하다
실행 과정 비교, explian anaylze sql 문장으로 볼 수 있습니다
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Postgresql 사용자 로그인 오류 횟수를 제한하는 실례 코드oracle에서 FAILED_ 를 설정할 수 있습니다.LOGIN_ATTEMPTS는 사용자 비밀번호의 로그인 오류 횟수를 제한하지만postgresql에서는 이 기능을 지원하지 않습니다.PostgreSQL은 이벤트 트리...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.