mysql이 공동 인덱스를 생성할 수 있나요?

青灯夜游
풀어 주다: 2022-06-15 16:22:42
원래의
5955명이 탐색했습니다.

mysql은 공동 인덱스를 생성할 수 있습니다. MySQL에서는 최대 16개의 컬럼을 포함하는 조인트 인덱스를 생성할 수 있습니다. 1. 테이블을 생성할 때 생성합니다. "CREATE TABLE 테이블 이름(컬럼 이름 1 유형 PRIMARY KEY, 컬럼 이름 2 유형) 3 유형, ...INDEX 인덱스 이름(컬럼 이름 2, 컬럼 이름 3...));"; 2. 테이블 수정 시 구문 "CREATE INDEX 인덱스 이름 ON 테이블 이름(컬럼 이름 2, 컬럼 이름)"을 생성합니다. 3, 열 이름 4 );".

mysql이 공동 인덱스를 생성할 수 있나요?

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

공동지수란 무엇인가요? 조인트 인덱스의 본질: 두 개 이상의 열에서 가장 왼쪽에 일치하는 인덱스를 조인트 인덱스라고 하며, 조인트 인덱스를 복합 인덱스라고도 합니다. MySQL을 사용하면 사용자는 최대 16개의 열을 포함하는 복합 인덱스를 생성할 수 있습니다. 복합 인덱스의 경우: MySQL은 인덱스의 필드를 왼쪽에서 오른쪽으로 사용합니다. 쿼리는 인덱스의 일부만 사용할 수 있지만 가장 왼쪽 부분만 사용할 수 있습니다.

예를 들어 인덱스는

입니다. 검색에는 a | a, b | a, b, c의 세 가지 조합이 지원되지만, 가장 왼쪽 필드가 상수 참조인 경우에는 지원되지 않습니다. 인덱스는 매우 효과적입니다.

쿼리 최적화 프로그램은 인덱스의 모든 열을 테스트하는 쿼리 또는 첫 번째 열, 처음 두 열 등을 테스트하는 쿼리에 복합 인덱스를 사용합니다. key index (a,b,c)
인덱스 정의에서 올바른 순서로 열을 지정하면 단일 복합 인덱스를 사용하여 동일한 테이블에서 이러한 유형의 쿼리 속도를 높일 수 있습니다.

테이블 생성 시 결합 인덱스 생성

구문:

CREATE TABLE 表名 (
    c1 data_type PRIMARY KEY,
    c2 data_type,
    c3 data_type,
    c4 data_type,
    INDEX 索引名 (c2,c3,c4)
);
로그인 후 복사
이 구문에서 결합 인덱스는 c2, c3 및 c4 ​​세 개의 열로 구성됩니다.

테이블 수정 시 조인트 인덱스 생성

다음 CREATE INDEX 문을 사용하여 기존 테이블에 복합 인덱스를 추가할 수 있습니다.

CREATE INDEX 索引名 
ON 表名(c2,c3,c4);
로그인 후 복사
(c1, c2, c3에 복합 인덱스가 있는 경우 주의하세요) ), you 인덱스 검색 기능은 다음 열 조합 중 하나를 기반으로 구축됩니다.

(c1)
(c1,c2)
(c1,c2,c3)
로그인 후 복사

예:

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1;
 
 
SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2;
 
 
SELECT  
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2 AND 
    c3 = v3;
로그인 후 복사

열이 인덱스의 가장 왼쪽 접두사를 형성하지 않는 경우 쿼리 최적화 프로그램은 인덱스를 사용할 수 없습니다. 조회를 수행합니다. 예를 들어 다음 쿼리는 복합을 사용하여 찾을 수 없습니다.

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c3 = v3;
로그인 후 복사

MySQL Union Index 예제

샘플 데이터베이스의 직원 테이블을 사용하는 방법을 보여 드리겠습니다.

다음 문은 lastName 및 firstName 열에 공동 인덱스를 생성합니다.

CREATE INDEX name 
ON employees(lastName, firstName);
로그인 후 복사
mysql이 공동 인덱스를 생성할 수 있나요?

첫째, lastName 열이 가장 왼쪽 접두사이므로 lastName 값을 지정하는 쿼리에서 조회에 이름 인덱스를 사용할 수 있습니다. 인덱스의.

  • 두 번째로 이름 인덱스를 사용하면 lastName과 firstName 값의 조합 값을 쿼리할 수 있습니다.

  • name 인덱스는 다음 쿼리에서 찾는 데 사용됩니다.

  • 1) 성이 Patterson
SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';
로그인 후 복사

인 직원을 찾습니다. 이 쿼리는 인덱스의 가장 왼쪽 접두사(예: lastName 열)가 사용되므로 이름 인덱스를 사용합니다. 검색.

EXLAIN 절을 쿼리에 추가하여 이를 확인할 수 있습니다.

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';
로그인 후 복사

출력은 다음과 같습니다.

2) 성은 Patterson이고 이름은 Steve인 직원 찾기:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';
로그인 후 복사
mysql이 공동 인덱스를 생성할 수 있나요?이 쿼리에서는 둘 다입니다. lastName 및 firstName 열은 조회에 사용되므로 이름 인덱스를 사용합니다.

확인해 보겠습니다.

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';
로그인 후 복사

출력은 다음과 같습니다.

3) 성이 Patterson이고 이름이 Steve 또는 Mary인 직원을 찾습니다.

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');
로그인 후 복사
mysql이 공동 인덱스를 생성할 수 있나요?이 쿼리는 두 개가 포함된 두 번째 쿼리와 유사합니다. lastName 및 firstName 열은 조회에 사용됩니다.

다음 문은 인덱스 사용을 확인합니다.

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');
로그인 후 복사

출력은 다음과 같습니다.

firstName이 인덱스의 가장 왼쪽 접두사가 아닌 열만 사용되므로 쿼리 최적화 프로그램은 다음 쿼리에서 조회에 이름 인덱스를 사용할 수 없습니다. 사용:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Leslie';
로그인 후 복사
mysql이 공동 인덱스를 생성할 수 있나요?유감스럽게도 쿼리 최적화 프로그램은 firstName 또는 lastName 열이 조회에 사용되기 때문에 다음 쿼리에서 조회에 이름 인덱스를 사용할 수 없습니다.

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Anthony' OR
    lastName = 'Steve';
로그인 후 복사

【관련 추천:

mysql 비디오 튜토리얼

위 내용은 mysql이 공동 인덱스를 생성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿