优势 | 劣势 |
---|---|
提高数据检索效率,降低数据库的io成本 | 索引列需要占用空间 |
通过对索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 | 索引大大提高了查询效率,同时也降低了更新表的效率,因为更新表的同时也需要更新索引 |
索引结构 | 描述 |
---|---|
B+Tree索引(默认) | 最常见的索引类型,大部分引擎都支持 |
Hash索引 | 底层原理是哈希表,不支持范围查询,只能够精确匹配 |
R-Tree | 常用于地理空间数据类型 |
Full-text(全文索引) | 是一种通过建立倒排索引,快速匹配文档的方式 |
分类 | 含义 | 特点 | 关键字 |
---|---|---|---|
主键索引 | 针对于表中主键创建的索引 | 默认自动创建,只能有一个 | PRIMARY |
唯一索引 | 避免一个列有重复值 | 可以有多个 | UNIQUE,可以在建表的时候就指定,也可以后期手动添加 |
常规索引 | 快速定位数据 | 可以有多个 | 无,需手动创建 |
全文索引 | 快速进行文本检索 | 可以有多个 | FULLTEXT |
拓展:列值唯一就是依靠唯一索引实现的。
分类 | 含义 | 特点 |
---|---|---|
聚集索引 | 将数据存储与所以放到一块,索引结构的叶子节点保存了行数据 | 必须有,且只有一个,创建表时会自动将主键作为聚集索引,如果没有主键,使用第一个唯一索引作为聚集索引,如果都没有,InnoDB会自动一个隐藏的rowid作为聚集索引 |
二级索引 | 将数据与索引分开存储,索引结构的叶子节点存的是对应的主键 | 可以存在多个 |
比如执行select * from user where name =‘Arm’;
那么就会先去name索引里面检索Arm,查询到Arm里面对应的id是10,那么就会拿着这个10去聚集索引里面查找具体数据,然后返回。这个过程叫做“回表查询”。
create [unique|fulltext] index index_name on table_name (index_col_name1,…);
show index from table_name;
drop index index_name on table_name;