기존 MySQL 테이블을 가져 와서 열 중 하나를 사용하여 다시 정렬하는 가장 효율적인 SQL 쿼리는 무엇입니까? 선택 항목이 아니지만 전체 테이블을 하나의 열로 정렬해야합니다. 임시 테이블을 사용하는 것 같습니다.하지만 가장 좋은 방법은 무엇입니까?컬럼 중 하나를 사용하여 MySQL 테이블을 신속하게 다시 정렬하는 방법은 무엇입니까?
답변
테이블은 본질적으로 정렬되지 않은 데이터입니다. 해당 테이블에서 데이터를 가져 오는 쿼리는 정렬 될 수 있지만 테이블 자체는 정렬되지 않습니다.
쿼리를 정렬하려는 열에 인덱스가 있으면 쿼리 시간이 가장 길어집니다.
가장 좋은 방법은 손을 테이블 구조에서 벗어나 데이터베이스 기본 사항을 익히는 것입니다.
이 열에 색인을 만듭니다.
테이블이 인덱싱되는 것은 물론입니다. 사실 기본 인덱스가 int (10) 열에 정렬 오전. – Vacilando
표가 정렬되지 않았습니다 *. 데이터에 기본 순서가 포함되어 있다고 가정하지 마십시오. 특정 WHERE 절 필터가없는 경우에도 ORDER BY가 쿼리에 사용됩니다.
SQL Server와 PostgreSQL에서 테이블을 정렬 할 수 있으며 인덱스에 클러스터링하면 테이블이 정렬됩니다. –
글쎄, "SELECT column FROM table"을 실행하면 테이블에 쓰여진 순서대로 결과를 검색합니다. (항상 같은 순서로 가정합니다!)하지만 내 애플리케이션에서는 정렬해야합니다. 그러나 "SELECT column FROM table ORDER BY column"을 수행 할 때 매우 많은 작업이 필요합니다.테이블은 정적 (다른 곳에서 정기적으로 가져온 데이터)이기 때문에 한 번 열을 기준으로 테이블을 정렬하고 "ORDER BY"를 사용하지 않고 내 선택을 빠르고 정렬 할 수 있습니다. 그것은 어쨌든 아이디어입니다. – Vacilando
"테이블에 쓰여진 순서"에 대해 어떠한 보증도 할 수 없습니다. 당신의 테이블이 InnoDB를 사용한다면, 제한된 클러스터 된 인덱스 지원 (데이터가 저장된 순서를 정의)이있다. MyISAM에서는 이것이 불가능합니다. – Joe
가장 쉬운 방법은 해당 열에 키를 추가하는 것입니다.
변경 테이블 테이블 추가 키 (column
);
그런 다음 EXPLAIN SELECT를 사용하여 쿼리에 대한 키를 사용하고 있음을 표시 할 수 있습니다.
테이블에 계속 추가되거나 제거 된 행이있는 경우 OPTIMIZE TABLE 테이블을 실행하여 좋은 결과를 얻을 수도 있습니다.
실제로해야 할 필요는 없지만 ALTER TABLE ... ORDER BY ...
을 사용하여 표의 순서를 바꿀 수 있습니다. 그러나 그것을하기 전에 두 번 생각하십시오. 몇 번 더 생각해보십시오. 그러지 마라.
나는 정치에 대해서 호언 장담하고 싶지 않지만, 이것을하는 데는 유효한 이유가 있다고 생각한다. 편리함. python에서 repr()에 대해 생각해보십시오. 기술적으로 모든 객체는이 예제에서 datetime 객체의
@rgz : 당신이 그리워했다고 생각합니다. –
내 0.02c; 어쩌면 그는 단지 더 쉽게 읽을 수있는 방식으로 테이블을 재주문하기를 원할 것입니다. 같은 테이블 상상 :
TABLE FOO with ID Char(3) Primary Key,DESCRIPTION Varchar
4 행
ID | DESCRIPTION
001 | Test1
004 | Test4
003 | Test3
002 | Test2
을이 행 003과 002, 그래서 영업 이익은 순서를 변경하고 싶습니다 (테이블을 만들 때 알 수 없습니다) 나중에 삽입 된 일 수 있었다 읽을 수있는 방식으로 레코드 (나는 그가 주문 조항을 선택할 수 있음을 압니다).
이 경우에는 (SELECT * INTO backup_FOO FROM FOO) 테이블을 백업하고 모든 제약 조건을 제거한 다음 잘라내서 OP 기본 컬럼 순서대로 다시로드하십시오.
이 사실 일 수도 있지만 주문이있는 쿼리로 테이블을 보는 것이 어떻습니까? 테이블을 재주문하면 무엇을 할 수 있습니까? –
난 그냥 여기에 추측이야 :) : 당신은 "주문"을 할 때마다 선택을하고 다시 추측 할 필요가 없습니다. 부분적으로 정렬 된 테이블은 누락 된 ID가 있는지 모르는 독자를 오도 할 수 있습니다. 테이블의 맨 아래에. – systempuntoout
"주문과 함께 검색어가있는 표를 보는 것이 어떨까요?" systempuntoout이 추측했듯이, 테이블이 ID에 의해 정렬 된 경우 후속 선택은 "ORDER BY"를 사용할 필요가 없으므로 테이블이 더 빠를 것이기 때문입니다. (다시이 예제의 테이블은 동적으로 변경되지 않습니다.) – Vacilando
- 1. 필드 중 하나를 사용하여 구조체의 연결된 목록을 정렬하는 방법은 무엇입니까?
- 2. MySQL 컬럼
- 3. Mysql sql Locale을 기반으로 테이블을 정렬하는 방법은 무엇입니까?
- 4. 컨트롤러에서 모델의 mysql 쿼리 결과 중 하나를 전달하는 방법은 무엇입니까?
- 5. 배열을 사용하여 mysql 테이블을 쿼리하는 방법은 무엇입니까?
- 6. MySQL : 저장된 함수를 사용하여 문자열의 단어를 정렬하는 방법은 무엇입니까?
- 7. Zend_Form_Element_Text 중 하나를 설정하는 방법은 무엇입니까?
- 8. Fluent NHibernate 두 컬럼 중 하나에 대해 컬럼 매핑하기
- 9. mysql 테이블의 동적 컬럼?
- 10. 여러 열을 사용하여 MySQL 행을 정렬하는 방법은 무엇입니까?
- 11. InnoDB가 다중 컬럼 기본 키를 정렬하는 방법
- 12. 개발 중 빠른 컬럼/인덱스 생성을위한 MySQL 튜닝
- 13. 조인을 사용하여 바인딩 소스를 정렬하는 방법은 무엇입니까?
- 14. 의도적으로 MySQL 테이블을 충돌시키는 방법은 무엇입니까?
- 15. mutablensarray를 정렬하는 방법은 무엇입니까?
- 16. ssis를 사용하여 데이터베이스 테이블을 업데이트하는 방법은 무엇입니까?
- 17. .NET을 사용하여 XML 파일을 정렬하는 방법은 무엇입니까?
- 18. MySQL 내 컨텍스트에서보기/테이블을 만드는 방법은 무엇입니까?
- 19. 잠긴 mySQL 테이블을 복사하는 방법은 무엇입니까?
- 20. 두 필드를 사용하여 정렬하는 방법은 무엇입니까?
- 21. CakePHP에서 많은 hasMany 연관을 사용하여 mysql 테이블을 만드는 방법은 무엇입니까?
- 22. 열을 다시 정렬하는 방법
- 23. PK 2에서 테이블을 다시 시드하는 방법은 무엇입니까?
- 24. Express Node.js 프레임 워크 : 명명 된 param 세그먼트 중 하나를 대체하여 URL을 다시 쓰는 방법은 무엇입니까?
- 25. MySQL과 PHP를 사용하여 두 개의 MySQL 테이블을 계산하는 방법은 무엇입니까?
- 26. MySQL MyISAM이 텍스트 컬럼 인덱싱
- 27. AutoMapper를 사용하여 DataTable에 다시 채우는 방법은 무엇입니까?
- 28. @OrderBy를 사용하여 최대 절전 모드에서 복합 키 중 하나를 정렬하는 방법
- 29. MySQL (MyISAM) 테이블을 병렬로 업데이트하는 방법은 무엇입니까?
- 30. MySQL 테이블을 설정하는 가장 효율적인 방법은 무엇입니까?
'테이블 정렬'을 의미하지만 SELECT를 수행하지 않음을 명확히 할 수 있습니까? 그 자리에 '정렬'하고 싶다고 말하는거야? 그렇다면,이를 통해 달성/개선하려는 것은 무엇입니까? – Dancrumb
네, 어떻게 든 정렬 할 수 있습니다. 또는 임시 테이블에서 중요하지 않습니다. 꽤 정적 인 테이블 (임포트 된 데이터)에서이 작업을하고 싶습니다. 그래서 나중에 "ORDER BY"를 사용할 필요가 없습니다. – Vacilando