>  기사  >  데이터 베이스  >  MySQL 고급 인덱스 소개(요약 공유)

MySQL 고급 인덱스 소개(요약 공유)

WBOY
WBOY앞으로
2022-11-23 16:51:552024검색

이 글은 mysql에 대한 관련 지식을 제공하며, 인덱스의 장점과 단점, 인덱스의 분류, 인덱스 구조 및 인덱스 생성 등 인덱스에 관련된 내용을 주로 소개하고 있습니다. 모든 사람에게 도움이 되기를 바랍니다.

MySQL 고급 인덱스 소개(요약 공유)

추천 학습: mysql 동영상 튜토리얼

인덱스란 무엇인가요?

MySQL 공식 정의 인덱스: 인덱스(Index)는 MySQL이 데이터를 효율적으로 얻는 데 도움이 되는 데이터 구조입니다.
인덱스의 본질: 인덱스는 데이터 구조입니다.
색인의 목적: 사전과 비교할 수 있어 쿼리 효율성을 향상시킵니다.

참고:색인은 간단히 注:可以将索引简单的理解为 “排好序的快速查找数据结构”。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上

我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚集索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。

索引的优势和劣势

优势

类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本

通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

劣势

索引实际上是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也会占用空间

虽然索引大大提高查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息

索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询

MySQL索引分类

单值索引

定义:一个索引只包含单个列,一个表可以有多个单列索引

注:一般一张表最多而言不要超过5个索引

唯一索引

定义:索引列的值必须唯一,但允许有空值

复合索引

定义:一个索引包含多个列

基本语法

  • 创建
CREATE [UNIQUE] INDEX indexName ON mytable(columnnname(length));ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(length))
  • 删除
 DROP INDEX [indexName] ON mytable;
  • 查看
SHOW INDEX FROM table_name\G
  • 使用ALTER命令

有四种方式添加数据表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name(column_list):这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name(column_list):添加普通索引,索引值可出现多次。

ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list):该语句指定了索引为FULLTEXT,用于全文索引。

注:"정렬된 빠른 검색 데이터 구조"로 이해될 수 있습니다. 일반적으로 인덱스 자체도 매우 크고 메모리에 모두 저장하는 것이 불가능하기 때문에 인덱스 파일 형태로 디스크에 저장되는 경우가 많습니다
우리가 흔히 부르는 것 별도로 지정하지 않는 한 인덱스는 B를 참조합니다. 트리(다중 검색 트리, 반드시 이진일 필요는 없음) 구조로 구성된 인덱스입니다. 그 중 클러스터형 인덱스, 복합 인덱스, 접두사 인덱스, 고유 인덱스는 모두 기본적으로 B+ 트리 인덱스를 사용하며 이를 통칭하여 인덱스라고 합니다.

index의 장점과 단점

    Advantages
  • 대학 도서관의 서지 색인 구축과 유사하게 데이터 검색의 효율성을 높이고 데이터베이스의 IO 비용을 절감합니다.

  • 인덱스 컬럼을 통해 데이터 정렬, 데이터 정렬 비용 절감, CPU 소모 감소

  • 단점
  • 인덱스는 실제로 기본 키와 인덱스 필드를 저장하는 테이블이며, 엔터티 테이블이므로 인덱스 열도 공간을 차지합니다

  • 인덱스는 쿼리 속도를 크게 향상시키지만 테이블에 대한 INSERT, UPDATE, DELETE와 같은 테이블 업데이트 속도도 감소시킵니다. 테이블을 업데이트할 때 MySQL은 데이터뿐만 아니라 인덱스 파일도 저장해야 하기 때문에 인덱스 열을 추가하는 필드가 업데이트될 때마다 업데이트로 인한 키 값 변경 후 인덱스 정보가 조정됩니다. 효율성을 향상시키는 한 가지 요소는 MySQL에 많은 양의 데이터 테이블이 있는 경우 최상의 인덱스를 구축하거나 쿼리를 최적화하기 위해 연구하는 데 시간을 투자해야 한다는 것입니다

  • MySQL 인덱스 분류

단일 값 인덱스

정의:

인덱스는 단일 열만 포함하며 테이블은 여러 개의 단일 열 인덱스를 가질 수 있습니다.
  • 참고: 일반적으로 테이블에는 다음이 없어야 합니다. 최대 5개 이상의 인덱스

  • 고유 인덱스

  • 정의:

    인덱스 열의 값은 고유해야 하지만 null 값은 허용됩니다
  • 복합 인덱스
  • 🎜정의: 🎜 인덱스에는 여러 열이 포함되어 있습니다.🎜🎜🎜🎜기본 구문🎜🎜
      🎜🎜Create🎜🎜🎜rrreee
        🎜🎜Delete🎜🎜🎜rrreee
          🎜🎜View🎜🎜🎜rrreee
            🎜 🎜ALTER 사용 command🎜🎜🎜🎜🎜데이터 테이블을 추가하는 네 가지 방법이 있습니다. Index: 🎜🎜🎜🎜ALTER TABLE tbl_name ADD PRIMARY KEY(column_list): 이 문은 기본 키를 추가합니다. 즉, 인덱스 값은 고유해야 하며 NULL이 될 수 없습니다. . 🎜🎜🎜🎜ALTER TABLE tbl_name ADD UNIQUE index_name(column_list): 이 문으로 생성된 인덱스의 값은 고유해야 합니다(NULL을 제외하고 NULL은 여러 번 나타날 수 있음). 🎜🎜🎜🎜ALTER TABLE tbl_name ADD INDEX index_name(column_list): 일반 인덱스를 추가하면 해당 인덱스 값이 여러 번 나타날 수 있습니다. 🎜🎜🎜🎜ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list): 이 문은 전체 텍스트 인덱싱을 위해 인덱스를 FULLTEXT로 지정합니다. 🎜🎜🎜참고:[PRIMARY | UNIQUE | FULLTEXT]: 각각 고유 인덱스와 전체 텍스트 인덱스를 나타내는 인덱스 유형입니다. 🎜데이터 테이블 생성 시 인덱스 유형을 생략할 수 있습니다. 🎜🎜 [INDEX | KEY]: 데이터 테이블에 인덱스를 생성하도록 지정함을 나타냅니다. 🎜🎜🎜🎜MySQL 인덱스 구조🎜🎜🎜🎜🎜BTree 인덱스🎜🎜🎜🎜🎜🎜Hash 인덱스🎜🎜🎜🎜🎜🎜full_text 전체 텍스트 인덱스🎜🎜🎜🎜🎜 🎜R-트리 인덱스🎜🎜🎜🎜🎜🎜🎜인덱싱됨 생성 🎜🎜🎜인덱스를 생성해야 하는 경우🎜🎜🎜🎜🎜기본 키는 자동으로 고유 인덱스를 생성합니다🎜🎜🎜🎜쿼리 조건으로 자주 사용되는 필드는 인덱싱해야 합니다🎜🎜🎜🎜다른 필드와 연관된 필드 쿼리의 테이블에 외래 키 관계가 인덱싱됩니다. 🎜🎜🎜🎜자주 업데이트되는 필드는 인덱스 생성에 적합하지 않습니다. 각 업데이트가 레코드를 업데이트할 뿐만 아니라 인덱스도 업데이트하기 때문입니다.🎜🎜🎜🎜Where 조건에서 사용되지 않는 필드 색인이 생성되지 않았습니다🎜
  • 단일 키/결합 인덱스 선택 문제(결합 인덱스는 높은 동시성에서 생성되는 경향이 있음)

  • 쿼리의 정렬 필드를 인덱스를 통해 액세스하면 정렬 속도가 크게 향상됩니다

    Query 또는 그룹화 필드에서의 경계 론적 인덱스 생성에 적합하지 않은 상황
  • 너무 적은 테이블 레코드

자주 추가, 삭제 또는 수정 된 테이블

  • 테이블 반복적이고 균등하게 분산된 데이터가 있는 필드이므로 가장 자주 쿼리하고 가장 자주 정렬되는 데이터 열인 인덱스에만 사용해야 합니다.

    데이터 열에 반복되는 내용이 많으면 인덱싱해도 실질적인 효과가 별로 없습니다.
  • 권장 학습:
  • mysql 비디오 튜토리얼

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

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