source

MySQL 인덱스 및 순서

lovecheck 2023. 7. 31. 21:29
반응형

MySQL 인덱스 및 순서

이것은 제가 평생 가지고 있던 질문입니다.

제가 알기로는 지수의 순서가 중요합니다.그래서 지수는[first_name, last_name]와 동일하지 않습니다.[last_name, first_name],그렇죠?

첫 번째 인덱스만 정의하면 다음에 대해서만 사용됩니다.

SELECT * FROM table WHERE first_name="john" AND  last_name="doe"; 

때문이 아닌

SELECT * FROM table WHERE  last_name="doe" AND first_name="john";

저는 ORM을 사용하고 있기 때문에 이 열들을 어떤 순서로 부를지 전혀 모르겠습니다.모든 순열에 대한 인덱스를 추가해야 한다는 뜻입니까?2열 인덱스가 있으면 가능하지만, 인덱스가 3열 또는 4열에 있으면 어떻게 됩니까?

인덱스 순서는 쿼리 조건이 인덱스의 일부에만 적용되는 경우에 중요합니다.고려 사항:

  1. SELECT * FROM table WHERE first_name="john" AND last_name="doe"

  2. SELECT * FROM table WHERE first_name="john"

  3. SELECT * FROM table WHERE last_name="doe"

인덱스가 다음인 경우:first_name,last_name) 쿼리 1과 2는 사용하고 쿼리 3은 사용하지 않습니다.인덱스가 다음인 경우:last_name,first_name) 쿼리 1과 3은 사용하고 쿼리 2는 사용하지 않습니다.WHERE 절 내에서 조건 순서를 변경해도 두 경우 모두 적용되지 않습니다.

자세한 내용은 여기에 있습니다.

업데이트:
위 내용이 명확하지 않은 경우 - MySQL은 쿼리 조건의 열이 인덱스의 맨 왼쪽 접두사를 형성하는 경우에만 인덱스를 사용할 수 있습니다.위의 #2 쿼리는 사용할 수 없습니다(last_name,first_name) 인덱스는 다음을 기반으로 하기 때문에first_name그리고.first_name의 가장 왼쪽 접두사가 아닙니다(last_name,first_name) 색인.

쿼리 내의 조건 순서는 중요하지 않습니다. 위의 쿼리 #1은 다음을) 사용할 수 있습니다.last_name,first_name) 인덱스는 조건이 좋기 때문에 괜찮습니다.first_name그리고.last_name그리고, 함께, 그들은 가장 왼쪽 접두사를 형성합니다.last_name,first_name) 색인.

ChssPly76은 부울식의 순서가 인덱스의 열 순서와 일치할 필요가 없다는 것이 맞습니다.부울 연산자는 교환 연산자이며 MySQL 최적화 도구는 대부분의 경우 표현식을 인덱스와 일치시키는 방법을 알 수 있을 정도로 충분히 똑똑합니다.

또한 최적화 도구가 주어진 쿼리에 대해 어떤 인덱스를 선택할지 직접 확인할 수 있도록 MySQL의 기능을 사용하는 방법을 배워야 합니다.

한 번에 모든 것을 완전히 명확하게 하기 위해 답을 조금 더 연장하는 것은 어떨까요?

테이블에 여러 열 인덱스가 있는 경우, 최적화 도구는 인덱스의 맨 왼쪽 접두사를 사용하여 행을 찾을 수 있습니다.예를 들어, 세 개의 열 인덱스가 있는 경우(col1, col2, col3)인덱스 검색 기능이 있는 경우(col1),(col1, col2),그리고.(col1, col2, col3).

열이 인덱스의 맨 왼쪽 접두사를 형성하지 않으면 MySQL은 인덱스를 사용할 수 없습니다.여기에 SELECT 문이 표시되어 있다고 가정합니다.

SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;

(col1, col2, col3)처음 두 쿼리만 인덱스를 사용합니다.와 네 열을 하지만, 세번와네번쿼인덱된열스만포지함하을리는째째,,(col2)그리고.(col2, col3)의 대부분의 접두사가 남아 있지 않습니다.(col1, col2, col3)- MySQL 개발

언급URL : https://stackoverflow.com/questions/1252279/mysql-indices-and-order

반응형