>데이터 베이스 >MySQL 튜토리얼 >성능 저하 없이 단일 SQL 쿼리에서 여러 레코드를 어떻게 재정렬할 수 있습니까?

성능 저하 없이 단일 SQL 쿼리에서 여러 레코드를 어떻게 재정렬할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-07 06:16:02623검색

How Can You Reorder Multiple Records in a Single SQL Query Without Performance Penalties?

SQL을 사용하여 여러 레코드 재정렬

이 관계형 데이터베이스 시나리오에는 식품 항목을 나타내는 "Position" 필드가 포함된 테이블이 있습니다. 목록 내의 표시 순서("listID"로 식별됨) 작업은 항목(예: "배")을 특정 목록 내의 새 위치(예: "칩" 앞)로 이동하는 것입니다. 단일 SQL 쿼리로 이를 달성하려면 신중한 접근 방식이 필요합니다.

한 가지 일반적인 접근 방식은 다음과 같은 쿼리를 사용하여 영향을 받는 레코드를 검색하는 것입니다.

<code class="sql">SELECT id, position 
FROM my_table
WHERE listID = 1
AND position BETWEEN 1 AND 5;</code>

이 쿼리는 현재 위치와 대상 위치 사이의 모든 레코드.

그러나 여러 쿼리가 필요하지 않은 대체 접근 방식이 있습니다. 위치 사이에 "간격"이 생기도록 데이터를 수정하면 업데이트 프로세스가 단순화될 수 있습니다.

다음 쿼리를 실행하세요.

<code class="sql">UPDATE my_table
SET position = position * 10;</code>

이렇게 하면 모든 위치에 10이 곱해져 더 큰 크기가 효과적으로 생성됩니다.

Pears를 두 번째 위치로 이동하려면 다음을 실행합니다.

<code class="sql">UPDATE my_table
SET position = 15 /* New position for "Pears" */
WHERE listID = 1
AND name = 'Pears';</code>

Pears의 위치가 15로 조정되어 이전에 차지했던 간격이 남습니다.

여러 재정렬 작업 후 잠재적인 공백을 제거하려면 다음을 주기적으로 실행하십시오.

<code class="sql">UPDATE my_table
SET position = position * 10; /* Increase gaps */</code>

이 접근 방식은 단일 SQL 쿼리로 여러 레코드를 재정렬하는 보다 효율적인 솔루션을 제공하여 성능 없이도 항목이 원하는 순서로 유지되도록 보장합니다. 처벌을 받습니다.

위 내용은 성능 저하 없이 단일 SQL 쿼리에서 여러 레코드를 어떻게 재정렬할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.