索引是存储引擎快速找到记录的一种数据结构,是数据库中专门用于帮助用户快速查询数据的一种数据结构,可以帮助用户快速寻找到需要的数据行,是数据库性能优化中最重要的工具。
使用索引的主要目的是为了优化查询速度,它们包含着对数据表里所有记录的引用指针。简单的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
索引是在存储引擎中实现的,也就是说不同的存储引擎会使用不同的索引,像:MyISAM 和 InnoDB 这两种存储引擎使用的索引结构是 B + tree ;Memory 存储引擎支持 Btree和hash 索引结构。
在表中的多个字段组合上创建的索引,遵循最左前缀原则。
最左前缀原则:使用组合索引时在查询条件中使用了这些字段的左边字段时,索引才会被使用。
回表:如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息。
全文索引只能在MyISAM存储中才能使用,而且只能在char、varchar、text 类型字段上才能使用。
创建一个表用来做测试使用:
CREATE TABLE `user` (
`id` int(10) NOT NULL COMMENT '主键',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
`age` tinyint(3) NULL DEFAULT NULL COMMENT '年龄',
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
CREATE INDEX indexName ON
tableName(columnName(columnLength))
例如: create index index_name on `user`(name(10))
列的长度可以不写,但是创建索引时如果是blob 和 text 类型,必须指定length。
CREATE UNIQUE INDEX
indexName ON
tableName(columnName(columnLength))
CREATE FULLTEXT INDEX indexName ON tableName(columnName(columnLength))
ALTER TABLE tableName add INDEX indexName (column1,column2,column3)
例如:ALTER TABLE `user` add INDEX indexName (name,age,address)
DROP
INDEX
indexName ON
tableName;
例如:DROP INDEX index_name ON `user`
简单来讲:就是主键索引与辅助索引都是存储的是数据的指针,都是拿着指针去数据文件中找数据。
简单来讲:就是主键索引存储的是数据,在找到主键的时候就直接找到了数据,比较方便快捷;使用辅助索引的话存储的是主键的值,拿到主键的值,再去主键索引中找一下数据行。