开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情
索引介绍
索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。 类似一本书的目录,比如要查找book这个单词,可以先找到b开头的页然后向后查找,这个就类似索引。
索引是存储引擎用来快速查找记录的一种数据结构,按照实现的方式类分,主要有Hash索引和B+Tree索引。
索引分类
-
单列索引 一个索引只包含单个列,但一个表中可以有多个单列索引 普通索引 基本索引类型,没有限制,允许在定义索引的列中插入重复值和空值,只是为了查询数据更快一点 创建方式:
1.创建表时直接指定 create table table_name( name varchar(20), index index_name(name) -- 给name列创建索引 ); 2. 直接创建 create index indexname on tablename(columnname); 3.修改表结构(添加索引) alter table tablename add index indexname(columnname);唯一索引与普通索引不同的是索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一
创建方式:
1. 创建表时直接指定 create table table_name( name varchar(20), unique index_name(name) -- 给name列创建索引 ) 2. 直接创建 create unique index index_name on tablename(columnname); 3. 修改表结构 alter table 表名 add unique index_name(name)主键索引 当创建表时,MySQL会自动在主键列上建立一个索引,为主键索引,主键是具有唯一性并且不允许为null,是一种特殊的唯一索引。
-
组合索引 也叫复合索引,指的是在建立索引的时候使用多个字段,复合索引使用复合最左原则 创建索引的复合方法:create index intable_name on table_name(column1,column2);
-
全文索引 关键字为fulltext,主要用来查找文本中的关键字,而不是直接与索引中的值相比较,更像是一个搜索引擎,基于相似度的查询,而不是简单的where语句的参数匹配。 like+%适用于文本比较少时,全文索引在大量数据面前,比like+%快很多,但可能存在精度问题。 在数据量较大时,先将数据放入一个没有全局索引的表中,再用create index创建fulltext索引,比先为一张表建立fulltext然后再将数据写入的速度快很多。 想对一个词语使用全文索引搜索必须介于最小搜索长度和最大搜索长度,可以用 show variables like ‘%ft%’
创建方式:
1.create table table_name( name varchar(20),fulltext(name));
2.alter table table_name add fulltext index_name(content)
3. create fulltext index index_name on table_name(content)
使用全文索引:使用match和against关键字
select * from table_name where match(content) against('yo') -- 没有结果,单词数要大于等于3 select * from table_name where match(content) against('you')
- 空间索引(了解) 支持OpenGIS几何数据类型,空间数据类型有4种,为GEOMETRY,POINT,LINESTRING,POLYGON 使用SPATIAL关键字进行扩展,必须将其声明为NOT NULL
复合索引必须包含索引前面的字段才能够进行匹配