2011-09-14 9 views
1

다음 질문이 있습니다. 나는 두 개의 테이블을 가지고 있고 그것들을 따로 저장하고 싶다. 그러나, 내 응용 프로그램에서 정기적으로 UNION 연산을 수행해야하므로 효과적으로 처리 할 필요가 있습니다. 나는 이것이 성과 측면에서 좋지 않다고 생각한다. 나는 다음과 같은 뷰를 만드는 방법에 대해 생각했다 :MySQL보기 및 성능 만들기

CREATE VIEW merged_tables(fields from both tables) AS 
    SELECT * FROM table_a 
UNION 
    SELECT * FROM table_b 

어떻게 SELECT 쿼리의 성능이 영향을합니까? 실제로 영향을 미칩니 까 (내부 표현이 다른가) 아니면 단순한 쿼리를 사용하여 선택하는 것일까 요?

도움 주셔서 감사합니다.

답변

3

보기 내에서 UNION을 사용하면 이산 SELECT 문에서 UNION을 사용하는 것과 성능면에서 차이가 없습니다. 두 테이블 모두에서 SELECT *을 사용 중이며 내부 복잡성이 필요하지 않으므로 (예 : JOINS 또는 WHERE 조항이 없음) 실제로 더 이상 최적화 할 방법이 없습니다. 테이블이 유사한 데이터를 보유 할 당신이 그들을 논리적으로 분리 유지하려는 경우

그러나

는, 당신은 행이 다른 table_a 또는 table_b의 거주자했을 있는지 여부를 나타내는 부울 열이 하나 개의 테이블에 모든 것을 저장하는 것이 좋습니다 . 행을 구분하고 더 많은 혼동을 피할 수있는 방법을 얻게되고 성능에 큰 영향도 미치지 않습니다.

1

더 간단한 쿼리를 사용하여 선택하면됩니다. 속도 차이는 없지만 모든 데이터를 단일 테이블에 보관하는 경우보다 유니온을 쿼리하는 데 드는 비용이 (대부분의 경우) 크게 저하되지 않아야합니다. 이러한 단일 때문에

CREATE VIEW table_a AS SELECT * FROM table_all WHERE rec_type = 'A' 
CREATE VIEW table_b AS SELECT * FROM table_all WHERE rec_type = 'B' 

을 :

테이블이 정말 동일한 구조 인 경우에, 당신은 또한 당신이 논리적 레코드를 구분하는 하나의 저장을위한 테이블과 두 개의보기를 사용하는 다른 디자인을 고려할 수 테이블, INSERT, UPDATE, DELETE 및 SELECT의 테이블과 같이 사용할 수 있지만 테이블 의미에 대해 프로그램 할 수 있다는 장점이 있습니다. 솔루션의 이점은 table_a, table_b 엔티티 인 또는 table_all 엔티티에 대해 업데이트 할 수 있으며 유지 관리 할 두 개의 물리적 테이블이 없다는 것입니다.