2013-07-12 2 views
1

posts 테이블이 있는데 post_order 컬럼이 있습니다. 각 게시물의 순서를 저장합니다. 행의 순서를 25에서 15로 변경하면 모든 행이 15에서 끝까지 업데이트되어야합니다. 몇 줄에는 좋지만, 수천 줄에는 최악입니다.가장 효율적인 주문 데이터베이스 디자인

게시물을 주문하는 데 더 좋은 디자인이 있습니까? 더 효율적입니다.

+0

이 질문에 좋은 아이디어 http://dba.stackexchange.com/questions/46204/most-efficient-ordering-post-database-design –

답변

0

왜 15 시방식이 아닌 관련 주문으로 변경하지 않습니까? 이 같은 테이블이 있다고 가정하자 : 당신이 첫 번째 게시물을로 t을 변경하려는 경우

Post Post_Order 
---------------------- 
x  1 
y  2 
z  3 
.  . 
.  . 
t  10 

을, 당신은 순서대로 1 (x)의 값을 사용자가 선택한을 가지고 t의 1 post_order 및 설정 행을 변경할 수 있습니다 처음 (10).

+0

내 사용 사례가 아니므로 10에서 t로 이동하고 싶습니다. ~ 1, x 1 ~ 10하지 마십시오. –

0

기본 BASIC 트릭 (BASIC은 여전히 ​​줄 번호가있는 시간부터)을 사용하여 간격을으로 남겨 둘 수 있습니다.

x  10 
y  20 
z  30 
.  . 
.  . 
t  100 

그런 다음 t은, 말하자면, 두 번째 장소는 단지 하나의 행 업데이트를 포함 할 할 이동 : (뻔뻔 Kuzgun's answer에서 복사) 예를 들어

물론

x  10 
t  15 
y  20 
z  30 
.  . 
.  . 

, 당신은 여전히거야 "한 번에 한 줄"을 너무 많이 움직일 필요가 있지만, 이는 상대적으로 드물게 발생합니다 (문제가 발생하면 초기 간격을 더 크게 할 수 있습니다).


또는 수행중인 작업을 계속 수행하십시오. 수천 개의 항목을 재정렬하는 경우를 제외하고

정말 자주, 현대 하드웨어에 현대 DBMS는 그것으로 많은 문제가 없어야합니다 - 그냥 예를 들어, 하나의 명령에서 그것을 할주의 ...

UPDATE POST 
SET POST_ORDER = POST_ORDER + 1 
WHERE POST_ORDER > 1 -- AND other criteria 

... 각 행에 대해 별도의 UPDATE을 발행하는 대신

관련 문제