2011-10-16 3 views
2

JOIN은 SQL 데이터베이스의 편리한 기능이지만 대규모 데이터베이스 (> 10GB)는 어떨까요? 하나의 사례 (예 : 하나의 기사의 태그)와 관련된 항목을 얻으려는 경우 다 대다 관계의 3 개 (2 열) 테이블을 고려하십시오.JOIN은 메모리에 맞지 않는 거대한 mysql 데이터베이스입니다.

사실 (틀렸다면 수정하십시오.) : 1. JOIN의 경우 3 개의 테이블이 메모리 내에 있어야합니다. 2. PRIMARY KEY에 의한 단일 SELECT는 메모리를 소비하지 않습니다. 3. 동시 읽기 연결이 많은 경우 초과 연결은 대기열에 보관됩니다 (요청 또는 오버로드가 실패하지 않음).

그런 다음 세 가지 간단한 SELECT 쿼리를 수행하는 것이 더 좋지 않습니까? 이로 인해 시스템이 약간 느려지지만, 기가 바이트 크기의 전체 테이블을 처리하는 것이 더 효율적이라고 생각합니다.

더 추가하는 것이 궁극적 인 해결책이라고 제안 할 수 있습니다. 하지만 난 여전히 큰 테이블을 처리하는 것은 초과 RAM이 쉽지 않다 생각합니다.

PRIMARY KEY를 사용하여 간단한 SELECT 쿼리에 대한 작업을 제한하면 대용량 데이터베이스를 효율적으로 처리 할 수 ​​있습니다.

답변

4

세 개의 개별 테이블에서 선택을 수행하는 것이 더 좋다고 주장하는 경우 데이터베이스 엔진 외부에서 직접 데이터를 조인하면 잘못된 것입니다. 당신이 할 수있는 것보다 좋은 방법으로 당신의 쿼리에 합류 할 것입니다. 조인이 작동하려면 테이블이 RAM에 모두 들어 있어야하는 것은 아닙니다.

+1

하지만 RAM이 염려되는 경우 ORDER BY를 피하십시오. –

1

큰 데이터베이스의 경우 색인이 도움이 될 수 있습니다. (당신은 그냥 인덱스마다 필드를하지 않는 이유입니다)

이들은 http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm

http://www.tizag.com/mysqlTutorial/mysql-index.php

색인 데이터베이스 구현에 따라 다를 수 있습니다 도움이 될 수 있습니다 그들은/설계 올바르게 구현 너무 경우 단점이있다.

+0

PRIMARY KEY는 자동으로 색인이 생성되며 다른 열의 색인이 필요하지 않으므로 2 열짜리 표가 있습니다. 게다가 모든 것을 인덱싱하면 대형 데이터베이스에서 쓰기가 매우 느려집니다. – Googlebot

관련 문제