>  기사  >  데이터 베이스  >  MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

WBOY
WBOY앞으로
2023-06-03 11:18:572543검색

1. MySQL 인덱스 소개

인덱스는 데이터 쿼리 속도를 높이기 위해 MySQL 데이터베이스가 테이블의 하나 또는 여러 열에 추가하는 "디렉토리"입니다. MySQL의 인덱스는 특수 파일이지만 InnoDB 유형 엔진의 테이블 인덱스(MySQL 엔진에 대해서는 향후 기사에서 설명)는 테이블 공간의 필수적인 부분입니다.
MySQL 데이터베이스는 일반 인덱스, 고유 인덱스, 기본 키 인덱스, 복합 인덱스, 전체 텍스트 인덱스 총 5가지 유형의 인덱스를 지원합니다.

2. MySQL 인덱스 5가지에 대한 자세한 설명

(1) 일반 인덱스

일반 인덱스는 MySQL 데이터베이스에서 일반 인덱스의 열을 추가하는 데에는 특별한 역할이 없습니다. 인덱스는 차이 쿼리 속도를 높이기 위해 재생할 수 있습니다.
데이터 테이블 생성 시 공통 인덱스 SQL 문을 추가하는 예는 다음과 같습니다.

create table exp(id int , name varchar(20),index exp_name(name));

또는 인덱스를 키로 교체하는 방법은 다음과 같습니다.

create table exp (id ,int , name varahcr (20) ,  key exp_name(name));

위 SQL 명령에서 키 또는 인덱스는 인덱스 추가를 의미하며 밀접하게 이어집니다. 인덱스 이름 다음에 인덱스를 생성할 대괄호 안의 열이 옵니다.
본 글에서 소개하는 모든 인덱스 관련 SQL문은 특별한 지시가 없는 한 키로 대체될 수 있습니다. 글의 길이를 절약하기 위해 이 점은 앞으로 반복하지 않겠습니다.
또한 인덱스 이름을 지정하지 않고 인덱스를 추가할 수도 있습니다. 이 경우 MySQL은 필드와 동일한 이름을 가진 인덱스 이름을 인덱스에 자동으로 추가합니다.
실행 결과는 다음과 같습니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

데이터 테이블을 생성한 후 테이블에 새로운 일반 인덱스를 추가하는 SQL 문의 예는 다음과 같습니다.

alter table exp add index exp_id(id);

실행 결과는 다음과 같습니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

데이터 테이블 생성 후 일반 인덱스를 삭제하는 SQL 문의 예는 다음과 같습니다.

alter table drop index exp_name;

실행 결과는 다음과 같습니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

위 명령어에서 exp_name은 인덱스 이름이고, 인덱스가 포함된 필드의 이름이 아닙니다. 테이블의 인덱스 이름을 잊어버린 경우 다음 SQL 명령 입력 쿼리를 실행할 수 있습니다.

show index from exp;

여기서 exp는 테이블 이름입니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

위 그림에서 볼 수 있듯이 일반 인덱스를 추가한 후 desc를 사용하여 테이블 구조를 보면 해당 열에 Key 열 MUL이 나타나는 것을 볼 수 있는데 이는 일반 인덱스가 추가되었음을 의미합니다. 칼럼.

(2) 고유 인덱스

고유 인덱스는 일반 인덱스를 기반으로 하며 인덱스에 추가된 열의 모든 값은 한 번만 나타날 수 있어야 합니다. 고유색인에 자주 사용되는 용어는 학번, 학번 등의 필드에 추가되지만 이름, 이름 등의 필드에는 추가할 수 없습니다.
고유 인덱스의 추가는 일반 인덱스의 키와 인덱스를 고유 키와 고유 인덱스로 대체해야 한다는 점만 제외하면 일반 인덱스와 거의 동일합니다.
데이터 테이블 생성 시 고유 인덱스를 추가하는 SQL 문의 예는 다음과 같습니다.

create table exp (id int, name varchar(20), unique key (name));

위 명령어의 실행 결과는 다음과 같습니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

고유 인덱스를 추가할 때 나타나는 것을 알 수 있습니다. 필드에서 desc 명령을 사용하여 테이블 구조를 쿼리하면 키 열에 UNI가 표시되어 이 필드에 고유 인덱스가 추가되었음을 나타냅니다.
데이터 테이블 생성 후 고유 인덱스를 추가하는 SQL 문의 예시는 다음과 같습니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

고유 인덱스를 삭제하는 SQL 문의 예시는 다음과 같습니다.

alter table exp drop index name;

실행 결과는 다음과 같습니다. :

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

(3) 기본 키 인덱스

기본 키 인덱스는 데이터베이스의 모든 인덱스 중 가장 빠른 쿼리이며, 각 데이터 테이블에는 하나의 기본 키 인덱스 열만 가질 수 있습니다. 기본 키로 인덱싱된 열은 중복 데이터나 null 값을 허용하지 않습니다.
기본 키 인덱스 추가 및 삭제는 키가 기본 키로 대체된다는 점을 제외하면 일반 인덱스 및 고유 인덱스와 매우 유사합니다. 관련 SQL 명령어는 다음과 같습니다.

create table exp(id int ,name varchar(20), primary key (id));alter table exp add primary key (id);

기본키 인덱스의 컬럼이 추가되며, desc가 테이블 구조를 볼 때 아래와 같이 Key 컬럼에 PRI가 표시됩니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

삭제하려면 기본 키 인덱스의 경우 다음 명령을 실행할 수 있습니다.

alter table exp drop primary key;

참고: 이 SQL 문에서는 키를 인덱스로 바꿀 수 없습니다.
때때로 기본 키 인덱스를 삭제하려고 하면 MySQL이 이를 거부합니다. 이는 auto_increment 속성이 필드에 추가되었기 때문일 수 있으며 아래와 같이 필드의 기본 키 인덱스를 삭제할 수 있습니다.

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

(四)复合索引

如果想要创建一个包含不同的列的索引,我们就可以创建符合索引。其实,复合索引在业务场景中应用的非常频繁,比如,如果我们想要记录数据包的内容,则需要将IP和端口号作为标识数据包的依据,这时就可以把IP地址的列和端口号的列创建为复合索引。复合、添加和删除索引创建SQL语句示例如下:

create table exp (ip varchar(15),port int ,primary key (ip,port));
alter table exp add pirmary key(ip ,port);
alter table exp dorp priamary key;

复合索引在创建后,在使用desc查看数据表结构时,会在Key列中发现多个PRI,这就表示这些含有PRI的列就是复合索引的列了。如下所示:

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

注意,复合索引相当于一个多列的主键索引,因此,添加复合索引的任何一个列都不允许数据为空,并且这些列不允许数据完全相同,否则MySQL数据库会报错。如下所示:

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

(五)全文索引

全文索引主要是用于解决大数据量的情况下模糊匹配的问题。如果数据库中某个字段的数据量非常大,那么如果我们想要使用like+通配符的方式进行查找,速度就会变得非常慢。针对这种情况,我们就可以使用全文索引的方式,来加快模糊查询的速度。全文索引的原理便是通过分词技术,分析处文本中关键字及其出现的频率,并依次建立索引。全文索引的使用,与数据库版本、数据表引擎乃至字段类型息息相关,主要限制如下:
1、MySQL3.2版本以后才支持全文索引。
2、MySQL5.7版本以后MySQL才内置ngram插件,全文索引才开始支持中文。
3、MySQL5.6之前的版本,只有MyISAM引擎才支持全文索引。
4、MySQL5.6以后的版本,MyISAM引擎和InnoDB引擎都支持全文索引。
5、只有字段数据类型为char、varchar、以及text的字段才支持添加全文索引。
创建、添加以及删除全文索引SQL命令如下:

create table exp (id int ,content text ,filltext key (content))engine=MyISAM;
alter table exp add fulltext index (content);
alter table exp drop index content;

部分执行结果如下:

MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까

在创建了全文索引后,也不能够使用like+通配符的方式进行模糊查询,全文索引的使用有其特定的语法,如下所示:

select * from exp where match(content) against ('a');

其中,match后面的括号里是含有全文索引的字段,against后面的括号里是要模糊匹配的内容。
此外,全文索引的作用并不是唯一的,在很多场景下,我们并不会使用MySQL数据库内置的全文索引,而是使用第三方类似的索引以实现相同的功能。

三、MySQL索引使用原则

1、索引是典型的“以空间换时间”的策略,它会消耗计算机存储空间,但是会加快查询速度。
2、索引的添加,尽管加快了在查询时的查询速度,但是会减慢在插入、删除时的速度。因为在插入、删除数据时需要进行额外的索引操作。
3、索引并非越多越好,数据量不大时不需要添加索引。
4、如果一个表的值需要频繁的插入和修改,则不适合建立索引,反制,如果一个表中某个字段的值要经常进行查询、排序和分组的字段则需要建立索引。
5、如果一个字段满足建立唯一性索引的条件,就不要建立普通索引。

위 내용은 MySQL 데이터베이스에서 인덱스의 사용은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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