복붙노트

[SQL] 왜 SQL 쿼리의 결과는 내가 예상 한 순서대로 돌아 오지 않는다?

SQL

왜 SQL 쿼리의 결과는 내가 예상 한 순서대로 돌아 오지 않는다?

항목이 테이블에 삽입 한 다음 내가 같은 테이블에서 선택 * 같은 쿼리를 작성하는 경우, 왜 결과는 내가 기대하는 순서에 있지?

해결법

  1. ==============================

    1.질의의 순서는 성명에서 조 '에 의해 주문'은을 사용하여 강제 할 수 있습니다. SQL 데이터베이스는 실제로 물건을 넣어 주문할 이해, 또는 주어진 순서로 데이터를 저장하지 않습니다. 이 방법 당신은 당신이 항목을 원하는 주문 어떤 SQL을 말할 필요가 예를 들면 다음과 같습니다.

    질의의 순서는 성명에서 조 '에 의해 주문'은을 사용하여 강제 할 수 있습니다. SQL 데이터베이스는 실제로 물건을 넣어 주문할 이해, 또는 주어진 순서로 데이터를 저장하지 않습니다. 이 방법 당신은 당신이 항목을 원하는 주문 어떤 SQL을 말할 필요가 예를 들면 다음과 같습니다.

    Select * from Table
      order by column1 desc
    

    그녀는 나중에 당신을 위해 모든 것,하지만 그녀는 그 동안 그것을 어딘가에 저장 - 보류에 친구에게 물건을 나눠처럼 생각해. 그녀는 당신이 다른 것을위한 공간을 만들기 위해 찾고되지 않습니다 동안 주위를 이동하거나 다시 그녀에게 준 동일한 순서로 그것을 손으로 수 있지만, 그녀가하지 않는, 그래서 당신은 순서를 유지하기 위해 그녀를 말하지 않았다 .

    그래서 당신이 다시 넣을 수 있다는 것을, 당신이 데이터베이스에 줄 때 순서를 알아야 할 - 데이터베이스은 내장 된 방법은 본질적으로 어떤 순서에 대해 알고하지 않도록, 백그라운드에서 주변의 사물을 움직일 수 있어야합니다 나중에 원하는 주문. 주문 절은 SQL 데이터에 순서를 부과 할 수 있지만, 그 자체를 기억하거나하지 않습니다.

    중요한 점 : SQL 문에 의해 순서없이 지난 1 백만 회를 올바른 순서로 항목을 반환하는 경우에도, 그것이 그렇게 할 것이라는 점을 보장하지 않습니다. 클러스터 된 인덱스가 테이블에 존재하더라도, 결과는 예상 한 순서로 반환이 보장되지 않습니다. SQL 버전이 변경 특히,하지 명시 적 order by 절을 사용하여 원하는 순서대로 될 것 쿼리를 가정 프로그램을 깰 수 있습니다!

  2. ==============================

    2.삽입 된 순서로 결과를 기대하는 일반적인 오해입니다. 클러스터 된 인덱스를 사용하는 경우에도, 결과 세트는 예상대로되지 않을 수 있습니다. 주문을 강제로 유일한 방법은 절 "에 의해 순서의"를 사용하는 것입니다. 순서가 다를 수 있습니다 예상되는 것과 다른 이유. 쿼리는 병렬로 실행될 수 있으며, 결과 집합 병합되거나 가능한 한 빨리으로 결과 집합을 반환하는 동안이 쿼리 최적화 계획 때문일 수 있습니다.

    삽입 된 순서로 결과를 기대하는 일반적인 오해입니다. 클러스터 된 인덱스를 사용하는 경우에도, 결과 세트는 예상대로되지 않을 수 있습니다. 주문을 강제로 유일한 방법은 절 "에 의해 순서의"를 사용하는 것입니다. 순서가 다를 수 있습니다 예상되는 것과 다른 이유. 쿼리는 병렬로 실행될 수 있으며, 결과 집합 병합되거나 가능한 한 빨리으로 결과 집합을 반환하는 동안이 쿼리 최적화 계획 때문일 수 있습니다.

  3. from https://stackoverflow.com/questions/10999913/why-do-results-from-a-sql-query-not-come-back-in-the-order-i-expect by cc-by-sa and MIT license