오늘 문제가 발생했습니다. 즉, 지정된 ID 값의 순서로 결과 집합을 반환해야 하는 쿼리가 있습니다. 실제로 정렬을 위해 프로그램에 배치할 수도 있지만 갑자기 보고 싶었습니다. MySQL을 직접 사용하여 직접 쿼리하고 반환할 수 있으면 함수 구현에 정말 도움이 됩니다.
Field() 함수
Mysql은 우리가 지정한 순서에 따라 정렬을 사용자 정의할 수 있는 Field() 함수를 제공합니다.
예:
기본 키 ID를 가진 지역이라는 도시 정보 테이블이 있다고 가정합니다. 그리고 이름 속성 이름, 이제 ID 2, 3, 1을 쿼리하여 이 순서로 반환하려고 합니다
<p>select id, name from regions;#id name<br> 1 北京 2 上海 3 深圳<br></p>
Field()를 사용하세요
<p>select id, name from regions order by field(id, 2, 3, 1);#id name<br> 2 上海 3 深圳 1 北京<br></p>
이것은 사용자 정의 순서로 정렬하는 목적을 달성할 것입니다
성능
<p>mysql> explain select id from regions order by field(id, 2, 3, 1);+---+-------------+---------+------+---------------+-----+---------+-----+------+-----------------------------+|id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra ||-- | ----------- | ------- | ---- | ------------- | --- | ------- | --- | ---- | ----------------------------| |1 | SIMPLE | regions | index| NULL | id | 4 | NULL| 3 | Using index; Using filesort |+---+-------------+---------+------+---------------+-----+---------+-----+------+-----------------------------+<br></p>
Order By Field를 사용할 때 기본 키 ID에 따라 기본 키가 정렬되도록 지정하기 때문에 기본 키 인덱스가 2, 3, 1과 같은 조건의 레코드를 찾는 데 사용됩니다. 따라서 Extra에 Using index가 있음을 알 수 있습니다. 색인이 생성되지 않은 다른 필드로 변경하면 해당 항목이 존재하지 않습니다. Order By 절은 이 인덱스를 사용할 수 없으며 Filesort 정렬만 사용할 수 있으므로 Extra에 Using filesort가 있습니다
대략적인 프로세스는 다음과 같습니다.
id 인덱스의 첫 번째 리프 노드에서 시작하여 모두 스캔합니다.
각 리프 노드에 기록된 기본 키 ID에 따라 기본 키 인덱스(클러스터형 인덱스)로 이동하여 실제 행 데이터를 찾습니다.
행 데이터가 id = 2, 3, 1의 조건을 충족하는지 확인합니다. 만나면 꺼내서 돌려준다
기본 원리 테이블 전체를 순회한 후 FIELD 목록에서 선택한 레코드의 id를 검색해서 그 위치를 정렬 기준으로 해서 위치를 반환해준다는 사람도 있다.
이러한 사용은 매우 비효율적인 정렬 방법인 filesort 사용으로 이어질 것입니다(물론 Filesort를 사용하는 것이 반드시 느린 것은 아니며 때로는 사용하지 않는 것보다 빠릅니다).
일반적으로 ORDER BY 절은 LIMIT 절과 결합되어 행의 일부만 가져옵니다. 최상위 행을 꺼내기 위해 모든 행을 정렬하는 경우 이는 분명히 효율적인 접근 방식이 아닙니다.
Summary
Field() 함수는 데이터베이스 계층에서 필요한 일부 정렬을 직접 완료하고 비즈니스 코드를 단순화하는 데 도움이 될 수 있지만 동시에 호환성 및 성능 문제가 있는 경우에 사용하는 것이 좋습니다. 데이터 변경 빈도가 낮거나 데이터가 길며, 데이터 양이 많을 경우 데이터베이스를 사용하여 프로그램에서 데이터를 쿼리하고 정렬할 수 있습니다. "
mysql 비디오 튜토리얼"
위 내용은 이 문서에서는 Mysql이 ID 값의 순서에 따라 결과를 반환하는 방법을 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!