2008-09-16 2 views
3

SELECT 문을 사용하여 임시 테이블을 사용하면 논리 I/O 수가 증가하는 이유는 무엇입니까? 그것을 감소시키지 않고 데이터베이스에 대한 조회수를 증가시키지 않을까요? '문제'가 섹션으로 나뉘어져 있기 때문입니까? 배후에 무슨 일이 일어나고 있는지 알고 싶습니다. 적어도 MySQL과임시 테이블 및 SQL SELECT 성능

+0

어떤 DBMS입니까? 어떤 SQL을 사용하고 있습니까? –

답변

2

일반적인 대답은 없습니다. 임시 테이블이 사용되는 방법에 따라 다릅니다.

임시 테이블은 배치에서 나중에 여러 번 사용되는 복잡한 필터/조인 후에 작성된 행을 캐싱하여 IO를 줄일 수 있습니다. 이 방법으로 DB는 레코드의 서브 세트 만 필요할 때 기본 테이블을 여러 번 치는 것을 피할 수 있습니다.

임시 테이블은 나중에 쿼리에서 사용되지 않는 레코드를 저장하거나 엔진의 캐시에서 다른 데이터가 더 잘 사용할 수있는 많은 공간을 차지함으로써 IO를 증가시킬 수 있습니다.

쿼리 최적화 프로그램이 임시 테이블을 볼 수 없어 기본 쿼리에서 임시 쿼리를 포함하는 것보다 모든 내용을 한 번 사용하도록 임시 테이블을 만드는 것이 느리며 데이터의 불필요한 spool 소스 테이블에서 스트리밍 할 수 없게합니다.

+0

그 tempaly 테이블을 normaly 히 언급할만한 것은 RAM이나 사용자의 설정이 그러한 gib memeory 테이블이 디스크를 사용하는 것을 허용하지 않는 경우에 한해서만 타입 테이블 메모리로 만들어 지므로 중요한 임시 테이블 속도가 느려집니다. – Rufinus

0

AFAIK는 TMP 테이블은 HD에게 명중 어떤 것보다 훨씬 빠른에 select를하고, RAM에 보관됩니다

0

데이터베이스 측에서 컬렉션 구조 결과를 구축하는 문제의 클래스가 있습니다 결과 파트를 클라이언트에 반환하는 것이 각 파트에 대해 라운드 트립하는 것이 훨씬 좋습니다. 예를 들어

: 임의의 깊이 재귀 관계 (보스)

데이터를하지 않고 효율적으로 쿼리 실행을 만드는 방식으로 인덱싱되지 않습니다 질의 문제의 또 다른 클래스가있다. 결과를 사용자 지정 방식으로 인덱싱 할 수있는 컬렉션 구조로 가져 오면 이러한 쿼리에 대한 논리 IO가 줄어 듭니다.

1

임시 테이블을 사용하면 WHERE 절에서 하위 선택을 의미합니다. 이 작업을 세미 조인 작업이라고하며 보통 쿼리의 텍스트 실행 계획에서 볼 수 있습니다.

쿼리 최적화 프로그램이 하위 선택/임시 테이블을 발견하면 수행 할 작업에 대한 몇 가지 가정을합니다 그 데이터로 근본적으로 최적화 프로그램은 하위 선택 결과 집합에 조인을 수행하는 실행 계획을 작성하여 다른 테이블에서 읽어야하는 행 수를 줄입니다. 행 수가 적기 때문에 쿼리 엔진은 디스크/메모리에서 적은 페이지를 읽고 필요한 I/O 양을 줄일 수 있습니다.