2010-05-01 2 views
0

나는 확장이 가능한 샵 솔루션을 만들고 있습니다. 현재 여러 국가를 기반으로하는 상점 (예 : 영국, 미국, 독일, 덴마크 등)에서 하루 평균 1-2,000 건의 주문을 검색하지만이 주문은 2 년 내에이 금액의 10 배가 될 수 있습니다.멀티 샵 주문 테이블 및 샵을 기반으로 한 순차 주문 번호

나는 국가 별 상점 데이터베이스를 사용하여 주문 테이블을 저장하거나 모든 것을 하나의 주문 테이블로 결합하려고합니다.

모든 주문이 글로벌 ID (자동 num) 및 국가 ID (예 : uk, de, dk 등)가있는 하나의 테이블에있는 경우 각 국가의 주문도 순차적으로 주문해야합니다. 본질적으로 글로벌 ID와 국가 주문 ID가 있어야합니다. 국가 주문 ID는 국가 만 순차적으로 표시됩니다 (예 :

글로벌 ID = 1000, 국가 = 영국 국가 순서 ID = 1000
글로벌 ID = 1001 국가 = DE, 국가 주문 ID = 1000
글로벌 ID = 1002 국가 = DE, 국가 주문 ID = 1001 I가 필요
글로벌 ID = 1003 국가 = DE, 국가 주문 ID = 1002
글로벌 ID = 1004 국가 = 영국, 국가 주문 ID = 1001

글로벌 ID는 DB가 생성 될

하지 뭔가 걱정해라. 그러나 나는 다음 순차 번호를 찾기 위해 현재 국가 주문 기반 ID + 1을 얻기 위해 쿼리를 수행해야한다고 생각합니다. 두 가지 사항은 다음과 관련이 있습니다. 1) 테이블에 잠재적으로 수백만 행의 데이터가 있고 쿼리를 수행하기 전에 쿼리를 수행하는 쿼리 시간, 2) 동시 쓰기/읽기로 인해 ID 번호가 충돌 할 가능성이 있습니다.

MyISAM 테이블을 사용하면 ID 번호 충돌을 방지하기 위해 마지막 국가 주문 +1이 검색되는 동안 전체 테이블을 잠글 수 있습니다.

누가 더 세련된 솔루션을 알고 있는지 궁금합니다.

건배, imanc

답변

0

이 일을하는 방법이 있습니다.

INSERT INTO test123 (`Country`, `Country order code`) 
SELECT 'UK', MAX(`Country order code`) + 1 
FROM test123 
WHERE `Country` = 'UK' 

이것은 가장 높은 주문 코드 하나를 추가 선택에 영국에 대한 새로운 주문을 넣습니다. 이것은 테스트를 거쳤으며 테이블과 필드의 이름은 모두 변경해야합니다.