Mysql
- 索引
- 索引的分类
索引 | InnoDB引擎 | MyISAM引擎 | Memory引擎 |
---|---|---|---|
Btree索引 | 支持 | 支持 | 支持 |
hash索引 | 不支持 | 不支持 | 支持 |
R-tree索引 | 不支持 | 支持 | 不支持 |
Full-text索引 | 5.6版本以后支持 | 支持 | 不支持 |
索引
解释说明:
索引指的是帮助mysql高效的获取数据的结构叫做索引(有序)
没有建立索引的时候–全表扫描–再数据非常庞大的时候查询效率会非常慢
建立索引的时候----参考BTree和B+tree
优点:
1.提高了数据检索的效率降低了数据库的io成本
2.通过索引列对数据进行排序,降低额数据排序的成本,降低CPU的消耗
缺点:
1.索引本身也是一种数据结构,所以也就会占用一定的磁盘空间
2.可以参考btree树和b+tree树的规则就知道,他是可以提高插叙效率但是再新增删除修改数据的时候是比较麻烦的,每次都有可能调整索引的数据结构
索引的分类
索引 | 解释说明 |
---|---|
单值索引 | 即一个索引只包含单个列,一个表可以有多个单列索引 |
唯一索引 | 索引列的值必须唯一 |
复合索引 | 即一个索引包含多个列 |
索引的语法
例如:现在有一个表
create table city
(
city_id bigint null comment '城市id',
city_name varchar(50) null comment '城市名称',
country_id bigint null comment '国家id',
constraint city_pk
primary key (city_id)
);
create table country
(
country_id bigint null comment '国家id',
country_name varchar(50) null comment '国家名称',
constraint country_pk
primary key (country_id)
);
#创建索引语法
create [unique | fulltext |spatial] index index_name [using index_type] on tbl_name(index_col_name,...)
index_col_name: column_name[(length)][asc | desc]
#实例sql(普通索引):
create index idx_city_name on city(city_name);
#查看索引
show index from table_name;
show index from city\G;
#删除索引
drop index index_name on tbl_name;
drop index idx_city_name on city;
#alter命令操作
1.添加主键--索引引用值必须唯一并且不可以为null
alter table tb_name add primary key(column_list);
2.添加唯一索引
alter table tb_name add unique index_name(column_list);
3.普通索引--索引值可以出现多次
alter table tb_name add index index_name(column_list);
4.FULLTEXT--指定的索引为FULLTEXT,用于全文检索
alter table tb_name add fulltext index_name(column_list)
索引设计原则