이 글은 mysql에 대한 관련 지식을 제공하며, 인덱스의 장점과 단점, 인덱스의 분류, 인덱스 구조 및 인덱스 생성 등 인덱스에 관련된 내용을 주로 소개하고 있습니다. 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: mysql 동영상 튜토리얼
MySQL 공식 정의 인덱스: 인덱스(Index)는 MySQL이 데이터를 효율적으로 얻는 데 도움이 되는 데이터 구조입니다.
인덱스의 본질: 인덱스는 데이터 구조입니다.
색인의 목적: 사전과 비교할 수 있어 쿼리 효율성을 향상시킵니다.
참고:
색인은 간단히 注:
可以将索引简单的理解为 “排好序的快速查找数据结构”。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上
我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引
。其中聚集索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。
优势
类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本
通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗
劣势
索引实际上是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也会占用空间
虽然索引大大提高查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,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 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+ 트리 인덱스를 사용하며 이를 통칭하여 인덱스라고 합니다.
대학 도서관의 서지 색인 구축과 유사하게 데이터 검색의 효율성을 높이고 데이터베이스의 IO 비용을 절감합니다.
인덱스 컬럼을 통해 데이터 정렬, 데이터 정렬 비용 절감, CPU 소모 감소
인덱스는 실제로 기본 키와 인덱스 필드를 저장하는 테이블이며, 엔터티 테이블이므로 인덱스 열도 공간을 차지합니다
인덱스는 쿼리 속도를 크게 향상시키지만 테이블에 대한 INSERT, UPDATE, DELETE와 같은 테이블 업데이트 속도도 감소시킵니다. 테이블을 업데이트할 때 MySQL은 데이터뿐만 아니라 인덱스 파일도 저장해야 하기 때문에 인덱스 열을 추가하는 필드가 업데이트될 때마다 업데이트로 인한 키 값 변경 후 인덱스 정보가 조정됩니다. 효율성을 향상시키는 한 가지 요소는 MySQL에 많은 양의 데이터 테이블이 있는 경우 최상의 인덱스를 구축하거나 쿼리를 최적화하기 위해 연구하는 데 시간을 투자해야 한다는 것입니다
정의:
인덱스는 단일 열만 포함하며 테이블은 여러 개의 단일 열 인덱스를 가질 수 있습니다.참고:
일반적으로 테이블에는 다음이 없어야 합니다. 최대 5개 이상의 인덱스
정의:
인덱스 열의 값은 고유해야 하지만 null 값은 허용됩니다참고:
[PRIMARY | UNIQUE | FULLTEXT]: 각각 고유 인덱스와 전체 텍스트 인덱스를 나타내는 인덱스 유형입니다. 🎜데이터 테이블 생성 시 인덱스 유형을 생략할 수 있습니다. 🎜🎜 [INDEX | KEY]: 데이터 테이블에 인덱스를 생성하도록 지정함을 나타냅니다. 🎜🎜🎜🎜MySQL 인덱스 구조🎜🎜🎜🎜🎜BTree 인덱스🎜🎜🎜🎜🎜🎜Hash 인덱스🎜🎜🎜🎜🎜🎜full_text 전체 텍스트 인덱스🎜🎜🎜🎜🎜 🎜R-트리 인덱스🎜🎜🎜🎜🎜🎜🎜인덱싱됨 생성 🎜🎜🎜인덱스를 생성해야 하는 경우🎜🎜🎜🎜🎜기본 키는 자동으로 고유 인덱스를 생성합니다🎜🎜🎜🎜쿼리 조건으로 자주 사용되는 필드는 인덱싱해야 합니다🎜🎜🎜🎜다른 필드와 연관된 필드 쿼리의 테이블에 외래 키 관계가 인덱싱됩니다. 🎜🎜🎜🎜자주 업데이트되는 필드는 인덱스 생성에 적합하지 않습니다. 각 업데이트가 레코드를 업데이트할 뿐만 아니라 인덱스도 업데이트하기 때문입니다.🎜🎜🎜🎜Where 조건에서 사용되지 않는 필드 색인이 생성되지 않았습니다🎜단일 키/결합 인덱스 선택 문제(결합 인덱스는 높은 동시성에서 생성되는 경향이 있음)
쿼리의 정렬 필드를 인덱스를 통해 액세스하면 정렬 속도가 크게 향상됩니다
Query 또는 그룹화 필드에서의 경계 론적 인덱스 생성에 적합하지 않은 상황자주 추가, 삭제 또는 수정 된 테이블
테이블 반복적이고 균등하게 분산된 데이터가 있는 필드이므로 가장 자주 쿼리하고 가장 자주 정렬되는 데이터 열인 인덱스에만 사용해야 합니다.
데이터 열에 반복되는 내용이 많으면 인덱싱해도 실질적인 효과가 별로 없습니다.위 내용은 MySQL 고급 인덱스 소개(요약 공유)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!