索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在 单独的索引文件中,也可能和数据一起存储在数据文件中)。
我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都 是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。
可以提高数据检索的效率,降低数据库的IO成本,类似于书的目录。 – 检索
通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。 --排序
被索引的列会自动进行排序,包括【单列索引】和【组合索引】,只是组合索引的排序要复杂一些。如果按照索引列的顺序进行排序,对应order by语句来说,效率就会提高很多。where 索引列在存储引擎层处理 索引下推 ICP只有在MyISAM引擎、InnoDB(5.6以后)上才能使用,而且只能在CHAR,VARCHAR,TEXT类型字段上使用全文索 引。 fulltext
优先级最高 先执行 不会执行其他索引
存储引擎 决定执行一个索引
不做介绍,一般使用不到。
单列索引之普通索引
CREATE INDEX index_name ON table(column(length)) ; ALTER TABLE table_name ADD INDEX index_name (column(length)) ;单列索引之唯一索引
CREATE UNIQUE INDEX index_name ON table(column(length)) ; alter table table_name add unique index index_name(column);单列索引之全文索引
CREATE FULLTEXT INDEX index_name ON table(column(length)) ; alter table table_name add fulltext index_name(column)组合索引
ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10)) ;