2011-02-22 7 views
0

10 년 동안 데이터를 보유한 테이블이 있으며 성능에 문제가 있습니다. 이전 데이터를 별도의 기록표로 옮길 계획입니다. 문제는 내가 거기에 있다면 첫 번째 테이블에서 선택해야하고 두 번째 테이블이 아니라면. 나는 두 번째 테이블에서 항상 조회를 수행 할 것이기 때문에 조인을하고 싶지 않습니다. 도움?최소한의 변경으로 데이터웨어 하우스 수행

+0

ID 필드를 기반으로 마이그레이션하거나 날짜를 만들 수 있습니까? – Oded

+0

10 년 동안의 데이터 : 행의 수와 해당 인덱스의 성능은 얼마나 좋습니까? 통계가 업데이트 되었습니까? –

+0

@Oded - 정교하게 말하면, 나는 일정한 기준을 만족하는 행을 이동시켜 역사표로 옮길 수있는 주간 과정을 가질 계획이다. 내가 원하는 건 "currentdata에서 SELECT *와 0 rows select * from olddata"라고 말하는 것입니다. –

답변

1

아직 데이터를 쿼리하지 않아도 다른 테이블로 이동할 수 있습니까? 지금 테이블이 얼마나 큽니까? 색인이란 무엇입니까? 테이블을 나누는 것을 고려 했습니까?

다른 테이블로 이동해야하는 경우 if 문을 사용하여 저장된 procs를 쿼리 할 수 ​​있습니다. 먼저 주 테이블을 쿼리 한 다음 rowcount = 0이 다른 테이블을 쿼리합니다. 메인 테이블에없는 레코드의 경우 속도가 느려지지만 거기에있는 경우 빠르게 유지해야합니다. 그러나 두 가지 모두에서 레코드가 필요한 시점을 알 수 없습니다.

CREATE PROC myproc (@test INT) 
AS 
SELECT field1, field2 from table1field1, field2 from table1 
IF @@rowcount = 0 
BEGIN 
SELECT field1, field2 FROM table2 field1, field2 from table1 
END 

을하지만 정말 파티셔닝 및 인덱싱이 제대로 probaly 최고의 선택입니다 : 코드의

샘플이 작업을 수행합니다. 또한 기존 쿼리를 최적화하십시오. 커서, 상관 부속 조회, 뷰를 호출하는보기, 스. 라 함수, wheres 절 등의 잘 알려지지 않은 기술을 사용하면 조회를 수정하기 만하면 아카이브 할 필요가 없습니다.

경우에 따라 더 나은 서버를 구입하는 것이 도움이 될 수 있습니다.

+0

이 부분에 대한 나의 무지를 용서하고, 나는 업데이트 등을 위해 저장된 procs를 사용했지만 하나도 선택하지 않았다. 어떻게 구문이 보이겠습니까? –

1

별도의 기록 표를 사용하는 대신 성능 향상을 위해 날짜의 일부 기능 (예 :?)으로 표를 분할하는 것이 좋습니다.

관련 문제