2010-12-27 3 views
0

이 기본적인 질문이 될 수 있습니다 나는 그렇게처럼 내 PHP 코드의 일부에 임시 테이블을 사용하고 있습니다 :여러 개의 임시 테이블?

  1. CREATE TEMPORARY TABLE ttable(`d` DATE NOT NULL , `p` DECIMAL(11, 2) NOT NULL , UNIQUE KEY `date` ( `date`));
  2. INSERT INTO ttable(d, p) VALUES ('$d' , '$p');
  3. SELECT * FROM ttable;

우리가 확장으로 우리의 사이트에 문제가 있습니까? 즉, 사용자 1의 테이블은 & 사용자 2의 테이블이 섞일 것입니까 & 사용자 1은 사용자 2의 테이블을 봅니다 & 그 반대의 경우도 마찬가지입니까? 고유 한 임시 테이블마다 고유 한 이름을 만드는 것이 더 좋습니까?

thx

답변

0

임시 테이블을 사용하는 것과 다른 방법을 찾는 것이 거의 항상 좋습니다. 내가 그들을 고려할 것

유일한 시간은 다음과 같은 조건에서입니다 :

  1. 활동이 드물다. 의미, 주어진 사용자 일주일에 한 번이 작업을 수행합니다.
  2. 정기적으로 전체 데이터를 가져 오기 전에 보관 컨테이너로 사용됩니다.
  3. 채우기 전에 구조가 알려지지 않은 데이터를 처리합니다.

3 명 모두는 실제로 데이터 매핑이 런타임에 정의되는 일종의 일괄 대량 가져 오기 루틴을 구축합니다.

응용 프로그램에서 임시 테이블을 자주 만드는 경우 더 나은 방법이 있습니다.

확장 성은로드되는 데이터의 양과 임시 테이블 사용 빈도에 따라 달라질 수 있습니다. 인신 매매가 낮은 사이트의 경우 괜찮을 수 있습니다.

우리는 클라이언트의 앱에 의해 임시 테이블 사용량을 추출하는 중입니다. 시스템에서 쿼리의 90 %가 임시 테이블을 생성합니다. 모든 쿼리를 분석 한 결과 원래의 개발자는 SQL을 이해하지 못했기 때문에이 메커니즘을 사용했음을 알 수있었습니다. 새로운 사용자가 시스템에 추가 될 때 성능이 급격히 떨어지기 때문에이 작업을 수행하고 있습니다.

유스 케이스를 게시 할 수 있습니까? 어쩌면 우리는 대체 메커니즘을 제공하는 것을 도울 수 있습니다.

UPDATE : 지금 우리가 사용 사례를 가지고

는, 여기 당신이 필요 달성하는 간단한 테이블 구조입니다.

표 된 우편 번호
우편 번호 숯 (5) 또는 문자 (10)가 필요에 따라]
CityName이 된 VARCHAR (50) * 다른 열 위도이든 필요한만큼.

표 TempReadings

주어진 ZIP 모든 온도 판독 값을 얻으려면
ReadingDate 날짜 시간
온도 플로트 (또는 등가)
우편 번호 숯 (5) 우편 번호 또는 테이블 외래 키] 코드 당신이 뭔가를 할 것이다 :

select ZipCode, ReadingDate, Temperature 
from TempReadings 

메인 우편 번호 테이블에서 정보를 필요로하는 경우 :

select Z.ZipCode, Z.CityName, TR.ReadingDate, TR.Temperature 
from ZipCodes Z 
inner join TempReadings TR on (TR.ZipCode = Z.ZipCode) 

where where 절을 필요에 따라 추가하십시오. 위의 중 어느 것도 우편 번호별로 별도의 테이블이 필요하지 않습니다.

+0

사실입니다. 서브 쿼리를 지원하는 MySQL 버전으로 업그레이드했기 때문에 코드에서 임시 테이블을 만드는 것이 좋은 생각 인 경우는 드물 것 같습니다. – TehShrike

+0

나는 미국 내 모든 우편 번호에 대해 5 년간의 일일 기온을 가지고있다. 나는 이것을 db 내 비 임시 테이블에 저장한다 .... 즉 2 열 : 첫 번째는 우편 번호이고 두 번째는 그 지퍼에 대한 매일 temps. 따라서 각 우편에 대해 1이 아닌 총 1 개의 테이블이 있습니다. 데이터를 선택할 때 문자열을 분할하여 임시 테이블에 넣고 다른 테이블에 저장 한 일부 채우기 데이터와 결합하여 사용자에게 전달합니다. 임시 테이블이 실제로 성능에 많은 영향을 미칩니 까? –

+0

@ user522962 : 글쎄, temp 테이블은 모든 문자열 분할과 결합하여 확실히 자원 낭비이며 DB 서버에 불필요한로드를 추가합니다. 왜 당신은 문자열을 연결하고 분할합니까? 우편 번호, 날짜 및 임시 판독 값이 이미 포함 된 관련 테이블을 갖는 것이 훨씬 낫다는 것을 알 수 있습니다. 이것은 다루기 훨씬 쉬울 것입니다. – NotMe

1

임시 테이블은 세션마다 다릅니다. 호스트에 연결할 때마다 (PHP에서는 mysql_connect를 사용한다), 생성 한 임시 테이블은 해당 세션/연결 내에 만 존재한다.