>데이터 베이스 >MySQL 튜토리얼 >mysql 인덱스 소개

mysql 인덱스 소개

王林
王林앞으로
2020-01-30 21:11:382189검색

mysql 인덱스 소개

인덱스란 무엇인가요?

인덱스는 데이터를 효율적으로 얻는 데이터 구조입니다.

인덱스 유형

FULLTEXT, (HASH, BTREE[주로 mysql에서 사용하는 두 가지]), RTREE.

1, FULLTEXT

은 전체 텍스트 인덱스이며 현재 MyISAM 엔진에서만 지원됩니다. CREATE TABLE, ALTER TABLE, CREATE INDEX에서 사용할 수 있지만 현재는 CHAR, VARCHAR, TEXT 열에 대해 전체 텍스트 인덱스만 생성할 수 있습니다.

MyISAM과 함께 탄생하지 않은 전체 텍스트 인덱스는 WHERE name LIKE "%word%"와 같은 텍스트에 대한 퍼지 쿼리의 효율성이 낮은 문제를 해결하는 것으로 나타났습니다.

(무료 학습 동영상 튜토리얼 추천: mysql 동영상 튜토리얼)

2, HASH
HASH의 고유성으로 인해(거의 100% 고유함) 및 유사한 키-값 쌍으로 인덱스로 매우 적합합니다.

HASH 인덱스는 한 번만 찾을 수 있고 트리 인덱스처럼 레이어별로 검색할 필요가 없어 매우 효율적입니다. 그러나 이 효율성은 조건부입니다. 즉, "=" 및 "in" 조건에서만 효율적이며 범위 쿼리, 정렬 및 결합 인덱스에는 여전히 효율적이지 않습니다.

3, BTREE

BTREE 인덱스는 특정 알고리즘에 따라 인덱스 값을 트리 형태의 데이터 구조(바이너리 트리)에 저장하는 방법입니다. 트리의 진입 루트에서 노드를 순회하여 리프를 얻습니다. 이는 MySQL에서 기본이자 가장 일반적으로 사용되는 인덱스 유형입니다.

4, RTREE

RTREE는 MySQL에서 거의 사용되지 않으며 이 유형을 지원하는 유일한 스토리지 엔진은 MyISAM, BDB입니다. InnoDb 및 NDb, 여러 유형을 보관합니다.

BTREE에 비해 RTREE의 장점은 범위 검색에 있습니다.

인덱스 유형

일반 인덱스: 가속 쿼리 전용

고유 인덱스: 가속 쿼리 + 고유 열 값( null을 가질 수 있음)

기본 키 인덱스: 쿼리 속도 향상 + 고유 열 값(null을 가질 수 없음) + 테이블에 하나만 있음

결합 인덱스: 여러 열 값 ​​색인을 형성하며, 특히 결합 검색에 사용되며 색인 병합보다 효율성이 높습니다

전체 텍스트 색인: 텍스트 내용을 분할하여 검색

인덱스 사용# 🎜🎜#

1. 인덱스를 생성합니다

1 --创建普通索引CREATE INDEX index_name ON table_name(col_name);
2 --创建唯一索引CREATE UNIQUE INDEX index_name ON table_name(col_name);
3 --创建普通组合索引CREATE INDEX index_name ON table_name(col_name_1,col_name_2);
4 --创建唯一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);

2. 테이블 구조를 수정하여 인덱스를 생성합니다

ALTER TABLE table_name ADD INDEX index_name(col_name);

3. 테이블 생성 시 인덱스 지정

# 🎜🎜#

CREATE TABLE table_name (
    ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,INDEX index_name (col_name)
);

4. 인덱스 삭제

--直接删除索引DROP INDEX index_name ON table_name;
--修改表结构删除索引ALTER TABLE table_name DROP INDEX index_name;

5 기타 명령

- 查看表结构
    desc table_name;
 - 查看生成表的SQL
    show create table table_name;
 - 查看索引
    show index from  table_name;
 - 查看执行时间
    set profiling = 1;
    SQL...
    show profiles;

인덱스 실패 이유

1. 전체 값 일치는 사용되지 않는 인덱스와 동일합니다.

2. 최적의 접두사 규칙을 충족하지 못하면 인덱스 오류가 발생할 수도 있습니다.

3. 인덱스에 계산, 함수, (자동 또는 수동) 유형 변환)을 수행하면 인덱스가 실패하고 전체 테이블 스캔이 발생합니다.

4. MySQL은 같지 않음(a8093152e673feb7aba1828c43532094,!=)을 사용할 때 인덱스를 사용할 수 없으므로 전체 테이블 스캔이 발생합니다.

5. null이거나 null이 아니어도 인덱스를 사용할 수 없습니다.

6. 와일드카드 스위치('%abc')를 사용하면 인덱스 실패 및 전체 테이블 스캔이 발생합니다.

7. 문자열이 작은따옴표로 색인화되지 않으면 색인이 유효하지 않습니다.

8. 또는 연결하면 인덱스 오류가 발생하므로 이하를 사용하세요.

9. select * 쿼리를 사용하여 커버링 인덱스를 사용해 보세요.

mysql 인덱스 사양

1 [필수] 여러 필드가 조합된 경우에도 비즈니스에 고유한 특성이 있는 필드는 필수입니다. 고유 인덱스 구축(참고: 고유 인덱스가 삽입 속도에 영향을 미칠 것이라고 생각하지 마십시오. 이 속도 손실은 무시할 수 있습니다(

). 그러나 검색 속도는 분명히 향상됩니다. 매우 완벽한 검증은 Application Layer Control에서 이루어지며, 머피의 법칙에 따라 고유 인덱스가 없는 한 더티 데이터가 생성되어야 합니다. )

2. 테이블은 금지되어 있습니다. 조인해야 하는 필드의 데이터 유형은 절대적으로 일관되어야 합니다. 다중 테이블 관련 쿼리를 수행할 때 관련 필드에 인덱스가 있어야 합니다.


(참고: 더블 테이블 조인 시에도 테이블 인덱스 및 SQL 성능에 주의하세요.)

3. varchar 필드에는 인덱스 길이를 지정해야 합니다. 전체 필드를 인덱스할 필요는 없습니다. 인덱스 길이는 실제 텍스트 구분에 따라 결정될 수 있습니다.


(참고: 인덱스의 길이와 변별력은 한 쌍의 모순입니다. 일반적으로 문자열 유형 데이터의 경우 길이가 20인 인덱스는 90% 이상의 변별력을 갖습니다. , #🎜 🎜#

count(고유한 왼쪽(열 이름, 인덱스 길이))/count(*) 구별을 사용하여 )

4를 결정할 수 있습니다. 페이지 검색이 엄격히 금지되어 있거나 완전히 흐릿한 경우에는 검색 엔진을 사용하여 해결하세요.

(설명: 인덱스 파일은 B-Tree의 가장 왼쪽 접두사 매칭 기능을 가지고 있습니다. 왼쪽의 값이 결정되지 않으면 이 인덱스를 사용할 수 없습니다.) #🎜🎜 #
추천 관련 기사 튜토리얼:

mysqltutorial

위 내용은 mysql 인덱스 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제