索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。
使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。
索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
索引是表中一列或者若干列值排序的方法。
建立索引的目的是加快对表中记录的查找或排序。
索引需要占用额外的磁盘空间
更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列 (以及表)上面创建索引
索引随可以提升数据库查询的速度,但并不是任何情况下都适合创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。
最基本的索引类型,没有唯一性之类的限制
create index 索引名 on 表名 (列名[(length)]);
(列名[(length)]:length 为可选项,如果忽略 length 的值,则使用整个列的值作为索引。
如果指定使用列的前 length 个字符来创建索引,这样有利于减小索引文件的大小。
索引名建议以 “index” 结尾。
修改表方式创建
alter table 表名 add index 索引名 (列名);
创建表的时候指定索引
create table 表名 (字段1 数据类型,字段2 数据类型,index 索引名 (列名));
直接创建唯一索引
create unique index 索引名 on 表名 (列名);
修改表方式创建
alter table 表名 add unique 索引名 (列名);
创建表的时候指定
create table 表名 (字段1 数据类型,字段2 数据类型,unique 索引名 (列名));
创建表的时候指定索引
create table 表名 (字段1 数据类型,字段2 数据类型,primary key (列名));
修改表方式创建索引
alter table 表名 add primary key (列名);
创建表的时候指定组合索引
create table 表名 (字段1 数据类型,字段2 数据类型,index 索引名 (列名1,列名2));
select * from 表名 where 列名1='...' and(or) 列名2='...'
select * from 表名 where 列名1='...' AND 列名2='...' AND 列名3='...';
修改表方式创建组合索引
create table 表名 (字段1 数据类型,字段2 数据类型);
alter table 表名 add primary key (列名);
直接创建索引
create fulltext index 索引名 on 表名 (列名);
修改表方式指定全文索引
alter table 表名 add fulltext 索引名 (列名);
创建表的时候指定全文索引
create table 表名 (字段1 数据类型,字段2 数据类型,fulltext 索引名 (列名));
#数据类型可以为 CHAR、VARCHAR 或者 TEXT
使用全文索引查询
SELECT * FROM 表名 WHERE MATCH(列名) AGAINST('查询内容');
show create table 表名;
show index from 表名;
show keys from 表名;
drop index 索引名 on 表名;
alter table 表名 drop 索引名;
alter table 表名 drop primary key;
explain select … 可以用于分析select查询语句,看key字段,确定是否使用了索引或索引使用是否正确