posts
테이블이 있는데 post_order
컬럼이 있습니다. 각 게시물의 순서를 저장합니다. 행의 순서를 25에서 15로 변경하면 모든 행이 15에서 끝까지 업데이트되어야합니다. 몇 줄에는 좋지만, 수천 줄에는 최악입니다.가장 효율적인 주문 데이터베이스 디자인
게시물을 주문하는 데 더 좋은 디자인이 있습니까? 더 효율적입니다.
posts
테이블이 있는데 post_order
컬럼이 있습니다. 각 게시물의 순서를 저장합니다. 행의 순서를 25에서 15로 변경하면 모든 행이 15에서 끝까지 업데이트되어야합니다. 몇 줄에는 좋지만, 수천 줄에는 최악입니다.가장 효율적인 주문 데이터베이스 디자인
게시물을 주문하는 데 더 좋은 디자인이 있습니까? 더 효율적입니다.
왜 15 시방식이 아닌 관련 주문으로 변경하지 않습니까? 이 같은 테이블이 있다고 가정하자 : 당신이 첫 번째 게시물을로 t을 변경하려는 경우
Post Post_Order
----------------------
x 1
y 2
z 3
. .
. .
t 10
을, 당신은 순서대로 1 (x)의 값을 사용자가 선택한을 가지고 t의 1 post_order 및 설정 행을 변경할 수 있습니다 처음 (10).
내 사용 사례가 아니므로 10에서 t로 이동하고 싶습니다. ~ 1, x 1 ~ 10하지 마십시오. –
기본 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
을 발행하는 대신
이 질문에 좋은 아이디어 http://dba.stackexchange.com/questions/46204/most-efficient-ordering-post-database-design –