Mysql Index Simple Tutorial
기본 개념
인덱싱은 인덱스로 설정한 A 필드의 내용을 독립된 간격 S에 저장하는 것을 의미하며, 해당 필드의 내용만 포함됩니다. . 이 필드 A의 내용을 검색할 때 데이터 테이블에서 검색하는 대신 이 독립된 간격에서 직접 검색됩니다. 이러한 정규화된 필드를 찾은 후 필드 A가 가리키는 실제 데이터 레코드의 물리적 주소를 읽은 다음 해당 데이터 내용을 출력합니다. 색인화되지 않은 필드를 찾는 경우 데이터 테이블에서 검색됩니다. 데이터 테이블에는 관련 없는 필드가 많기 때문에 데이터베이스 프로그램은 해당 필드를 생략하거나 검색하지 않습니다. 관련 없는 필드를 확인하고 레코드를 여러 번 점프하려면 일정량의 리소스가 필요합니다. 물론, 인덱스를 많이 설정할수록 좋습니다. 이 독립구간 S에 인덱스가 배치되기 때문에 독립구간 S가 클수록 검색자원이 많아진다. 하나의 필드만 색인화한 경우 이 필드에 대한 검색 속도가 매우 빠릅니다.
인덱스를 설정하는 목적은 테이블의 레코드를 빠르게 검색하거나 정렬하는 것입니다. 테이블에 대한 인덱스 설정에는 비용이 따릅니다. 첫째, 데이터베이스의 저장 공간이 늘어나고, 둘째, 데이터를 삽입하고 수정하는 데 더 많은 시간이 걸립니다(인덱스도 이에 따라 변경되기 때문).
인덱스의 장점은 지정된 열을 정렬하고 검색 속도를 향상시킬 수 있다는 것입니다.
간단한 예:
특정 열의 데이터는
id name
12 Xiao Li
10 Xiaolong
5 Xiaoqing
99 Xiaohong
id 열을 인덱싱한 후 인덱스 테이블이 생성됩니다.
id 인덱스
5 3
10 2
12 1
99 4
id가 10인 곳에서 쿼리할 경우 인덱스 테이블이 사용됩니다. 10 이하는 5이기 때문입니다. 따라서 테이블 스캔 작업은 더 이상 수행되지 않습니다. 기본 테이블의 두 번째 행에 해당하는 두 번째 데이터 조각을 반환합니다. 이렇게 하면 쿼리 속도가 향상됩니다. 인덱스가 추가되지 않으면 전체 기본 테이블이 검색됩니다.
인덱싱할 열의 유형과 기타 관련 정보는 바이두에서 검색해야 합니다. 여기서 말씀드리는 내용은 몇 가지 기본 개념입니다.
데이터베이스 인덱스의 역할과 장점, 단점
인덱스를 만드는 이유는? 인덱스를 생성하면 시스템 성능이 크게 향상될 수 있기 때문입니다.
첫째, 고유 인덱스를 생성하면 데이터베이스 테이블의 각 데이터 행에 대한 고유성을 보장할 수 있습니다.
둘째, 데이터 검색 속도를 크게 높일 수 있는데, 이는 인덱스를 만드는 주요 이유이기도 합니다.
셋째, 테이블 간의 연결 속도를 높일 수 있는데, 이는 데이터의 참조 무결성을 달성하는 데 특히 의미가 있습니다.
넷째, 데이터 검색을 위해 그룹화 및 정렬 절을 사용하면 쿼리에서 그룹화 및 정렬하는 시간도 크게 줄일 수 있습니다.
다섯째, 인덱스를 사용하면 쿼리 프로세스 중에 최적화 숨기기를 사용하여 시스템 성능을 향상시킬 수 있습니다.
어떤 사람들은 다음과 같이 질문할 수 있습니다. 인덱스를 추가하면 많은 이점이 있는데 테이블의 모든 열에 대해 인덱스를 생성하는 것은 어떨까요? 이 생각은 합리적이기는 하지만 일방적이기도 하다. 인덱스에는 많은 장점이 있지만 테이블의 모든 열에 인덱스를 추가하는 것은 매우 현명하지 않습니다. 인덱스를 추가하면 단점이 많기 때문입니다.
먼저 인덱스를 생성하고 유지하는 데 시간이 걸리며, 데이터 양이 늘어날수록 이 시간도 늘어납니다.
둘째, 인덱스는 데이터 테이블이 차지하는 데이터 공간 외에 각 인덱스도 일정량의 물리적 공간을 차지해야 합니다. 필요한 것은 더 커질 것입니다.
셋째, 테이블의 데이터 추가, 삭제, 수정 시 인덱스를 동적으로 유지해야 하므로 데이터 유지 속도가 저하됩니다.
인덱스는 데이터베이스 테이블의 특정 열에 구축됩니다. 따라서 인덱스를 생성할 때 어떤 열을 인덱싱할 수 있고 어떤 열을 인덱싱할 수 없는지 신중하게 고려해야 합니다. 일반적으로 인덱스는 이러한 열에 생성되어야 합니다. 예를 들어 자주 검색되는 열의 경우
기본 키 역할을 하는 열의 경우 검색 속도가 빨라지고 열의 고유성이 강제됩니다. 조직 테이블의 데이터 배열 구조는 연결 열에 자주 사용됩니다. 이 열은 주로 연결 속도를 높일 수 있는 외래 키입니다. 연결에서 인덱스가 정렬되어 있고 지정된 범위가 연속적이므로 범위를 기준으로 검색해야 하는 열에 인덱스를 생성합니다.
인덱스가 정렬되었기 때문에 자주 정렬해야 하는 열에 인덱스를 생성하면 쿼리가 인덱스 정렬을 사용하여 정렬 쿼리 시간을 단축할 수 있습니다. 조건 판단을 빠르게 하기 위해 WHERE 절에 자주 사용됩니다.
또한 색인을 생성하면 안되는 열도 있습니다. 일반적으로 이러한 인덱스를 생성해서는 안 되는 컬럼은 다음과 같은 특징을 가지고 있습니다.
첫째, 쿼리에서 거의 사용되거나 참조되지 않는 컬럼에 대해서는 인덱스를 생성하면 안 됩니다. 이는 이러한 열이 거의 사용되지 않기 때문에 인덱싱 여부에 관계없이 쿼리 속도가 향상되지 않기 때문입니다. 반대로, 인덱스 추가로 인해 시스템 유지 속도가 감소하고 필요한 공간이 증가합니다.
둘째, 데이터 값이 적은 열에는 인덱스를 추가하면 안 됩니다. 이는 이러한 컬럼은 인사 테이블의 성별 컬럼과 같이 값이 매우 적기 때문에 질의 결과에서는 결과 세트의 데이터 행이 테이블의 데이터 행 중 큰 부분을 차지하기 때문입니다. 테이블에서 검색해야 할 데이터 행의 비율이 엄청납니다. 인덱스를 늘려도 검색 속도는 크게 향상되지 않습니다.
셋째, 텍스트, 이미지, 비트 데이터 유형으로 정의된 열에는 인덱스를 추가하면 안 됩니다. 이는 이러한 열의 데이터 볼륨이 상당히 크거나 값이 거의 없기 때문입니다.
넷째, 수정 성능이 검색 성능보다 훨씬 높을 경우 인덱스를 생성해서는 안 됩니다. 수정 성능과 검색 성능이 서로 상반되기 때문이다. 인덱스를 추가하면 검색 성능은 향상되지만 수정 성능은 저하됩니다. 인덱스를 줄이면 수정 성능이 향상되고 검색 성능이 저하됩니다. 따라서 수정 성능이 검색 성능보다 훨씬 높을 경우에는 인덱스를 생성하지 않아야 합니다.
인덱스 생성 방법 및 인덱스 특징
인덱스 생성 방법
인덱스를 생성하는 방법에는 여러 가지가 있는데, 직접 인덱스 생성 방식과 간접 인덱스 생성 방식이 있다. 방법. CREATE INDEX 문을 사용하거나 인덱스 생성 마법사를 사용하는 등 직접 인덱스를 생성하거나, 테이블에 기본 키 제약 조건이나 고유 키 제약 조건을 정의하는 등 간접적으로 인덱스를 생성하고 동시에 인덱스도 생성됩니다. 시간.
두 방법 모두 인덱스를 생성할 수 있지만, 인덱스를 생성하는 구체적인 내용은 다릅니다.
CREATE INDEX 문을 사용하거나 인덱스 생성 마법사를 사용하여 인덱스를 생성합니다. 이는 인덱스를 생성하는 가장 기본적인 방법이며, 요구 사항에 맞게 인덱스를 사용자 정의할 수 있는 가장 유연한 방법입니다. .
이런 방식으로 인덱스를 생성할 때 데이터 페이지의 전체 크기 지정, 정렬, 통계 정렬 등 다양한 옵션을 사용하여 인덱스를 최적화할 수 있습니다. 이 방법을 사용하면 인덱스의 유형, 고유성 및 복합성을 지정할 수 있습니다. 즉, 클러스터형 인덱스 또는 비클러스터형 인덱스를 만들 수 있고, 하나 또는 두 개의 열에 인덱스를 만들 수 있습니다. 두 개 이상의 열에 대한 색인입니다.
기본 키 제약 조건이나 고유 키 제약 조건을 정의하여 인덱스를 간접적으로 생성할 수도 있습니다. 기본 키 제약 조건은 테이블의 레코드가 동일한 기본 키 레코드를 갖도록 제한하여 데이터 무결성을 유지하는 논리입니다. 기본 키 제약 조건을 만들 때 시스템은 자동으로 고유한 클러스터형 인덱스를 만듭니다.
논리적으로는 기본키 제약조건이 중요한 구조이지만, 물리적 구조적으로 보면 기본키 제약조건에 해당하는 구조가 고유한 클러스터형 인덱스이다. 즉, 물리적 구현에는 기본 키 제약 조건이 없고 고유 클러스터형 인덱스만 있습니다.
마찬가지로 고유 키 제약 조건을 생성할 때 고유한 비클러스터형 인덱스인 인덱스도 생성됩니다. 따라서 제약조건을 이용해 인덱스를 생성할 때 인덱스의 종류와 특성은 기본적으로 정해져 있어 사용자가 커스터마이징할 여지가 적다.
테이블에 기본 키 또는 고유 키 제약 조건을 정의할 때 CREATE INDEX 문을 사용하여 생성된 표준 인덱스가 테이블에 이미 있는 경우 기본 키 제약 조건 또는 고유 키 제약 조건에 의해 생성된 인덱스가 이전 인덱스를 덮어씁니다. 생성된 인덱스입니다. 즉, 기본 키 제약 조건이나 고유 키 제약 조건에 의해 생성된 인덱스는 CREATE INDEX 문을 사용하여 생성된 인덱스보다 우선 순위가 높습니다.
인덱스의 특성
인덱스에는 고유 인덱스와 복합 인덱스라는 두 가지 특성이 있습니다.
고유 인덱스는 인덱스 열의 모든 데이터가 고유하고 중복된 데이터를 포함하지 않도록 보장합니다. 테이블에 이미 기본 키 제약 조건이나 고유 키 제약 조건이 있는 경우 SQL Server는 테이블이 생성되거나 수정될 때 자동으로 고유 인덱스를 생성합니다.
그러나 고유성을 보장해야 하는 경우에는 고유 인덱스 대신 기본 키 제약 조건이나 고유 키 제약 조건을 만들어야 합니다. 고유 인덱스를 생성할 때 다음 규칙을 신중하게 고려해야 합니다. 테이블에 기본 키 제약 조건이나 고유 키 제약 조건을 생성할 때 SQL Server는 자동으로 고유 인덱스를 생성합니다.
테이블에 이미 데이터가 포함되어 있으면 인덱스를 생성할 때 SQL Server는 삽입 문을 사용하여 데이터를 삽입하거나 수정 문을 사용하여 데이터를 수정할 때마다 테이블에 이미 있는 데이터의 중복성을 확인합니다. 중복된 값이 있는 경우 , 그러면 SQL Server는 명령문 실행을 취소하고 오류 메시지를 반환합니다.
테이블의 각 데이터 행에 고유한 값이 있는지 확인하여 엔터티가 고유하게 확인될 수 있도록 합니다. 예를 들어 인사 테이블의 이름 열에는 사람들이 동일한 이름을 가질 수 있으므로 고유 인덱스를 생성할 수 없습니다.
복합 인덱스는 두 개 이상의 열에 생성된 인덱스입니다. 검색 시 2개 이상의 컬럼이 키 값으로 작용하는 경우 해당 컬럼에 대해 복합 인덱스를 생성하는 것이 가장 좋습니다. 복합 인덱스를 생성할 때 다음 규칙을 고려해야 합니다. 최대 16개의 컬럼을 하나의 복합 인덱스로 결합할 수 있으며, 복합 인덱스를 구성하는 컬럼의 총 길이는 900바이트를 초과할 수 없습니다. 복합 열은 너무 길 수 없습니다.
복합 인덱스에서는 모든 열이 동일한 테이블에서 나와야 하며 복합 인덱스의 여러 테이블에 걸쳐 복합 열을 생성할 수 없습니다. 열 순서는 매우 중요합니다. 따라서 컬럼의 순서는 주의 깊게 정렬해야 합니다. 예를 들어 (COL1, COL2)의 인덱스는 순서가 다르기 때문에 가장 고유한 컬럼을 먼저 정의해야 합니다. 두 인덱스의 열이 다릅니다.
쿼리 최적화 프로그램이 복합 인덱스를 사용하려면 쿼리 문의 WHERE 절이 복합 인덱스의 첫 번째 열을 참조해야 합니다. 테이블에 여러 개의 키 열이 있는 경우 유용합니다. 복합 인덱스를 사용하면 쿼리 성능이 향상되고 테이블에 생성되는 인덱스 수를 줄일 수 있습니다.
인덱스 종류
고유하지 않은 인덱스는 이 인덱스의 값이 반복될 수 있음을 의미합니다. 고유 인덱스와 관련하여 이 인덱스의 값은 반복될 수 없습니다.
간단한 예로 우리의 신분증과 같은 것이 있습니다. 데이터베이스에 저장된 경우. 해당 이름에 대한 색인을 생성하면 동일한 이름을 가진 사람이 존재하기 때문에 고유하지 않은 색인이 됩니다. ID번호에 인덱스를 생성하면 고유한 인덱스가 되기 때문에 번거롭습니다.
위 내용은 mysql Advanced(2) index 간단한 튜토리얼 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!