MySQL的索引 普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引 。索引的创建、 使用、 删除等

索引的分类


功能逻辑 上:分别是普通索引、唯一索引、主键索引、全文索引。
物理实现方式:可以分为 2 种:聚簇索引和非聚簇索引。
作用字段个数 进行划分:分成单列索引和联合索引。
1. 普通索引
2. 唯一性索引
3. 主键索引
4. 单列索引
5. 多列(组合、联合)索引
6. 全文索引
7. 补充:空间索引
备注:不同的存储引擎支持的索引类型也不一样
InnoDB :支持 B-tree、Full-text 等索引,不支持 Hash索引;
MyISAM : 支持 B-tree、Full-text 等索引,不支持 Hash 索引;
Memory :支持 B-tree、Hash 等索引,不支持 Full-text 索引;
NDB :支持 Hash 索引,不支持 B-tree、Full-text 等索引;
Archive :不支持 B-tree、Hash、Full-text 等索引;

索引的创建

第一种 : 创建表的时候创建
#普通索引
CREATE TABLE 表名(
 id INT ,
 name VARCHAR(100), 
 INDEX(name) 
);

#唯一索引
CREATE TABLE 表名(
 id INT ,
 name VARCHAR(100), 
 UNIQUE INDEX(name) 
);

#主键索引
CREATE TABLE 表名(
 id INT ,
 name VARCHAR(100), 
 PRIMARY KEY(id)
);

#组合索引
CREATE TABLE 表名(
 id INT ,
 name VARCHAR(100), 
INDEX 索引名(id,name)
);
#全文索引

CREATE TABLE 表名(
 id INT ,
 name VARCHAR(100), 
FULLTEXT INDEX 索引名(name)
);

#空间索引   空间索引的创建要求空间类型的字段必须为非空 。
CREATE TABLE 表名(
 id INT ,
 name VARCHAR(100) GEOMETRY NOT NULL, 
SPATIAL INDEX 索引名(id,name)
);

第二种:在已经存在的表上面创建索引
ALTER TABLE 表名 ADD index 索引名(列明)




#删除索引
ALTER TABLE 表名 DROP INDEX 索引名;

隐藏索引

#切换成隐藏索引
ALTER TABLE tablename ALTER INDEX index_name INVISIBLE;
#切换成非隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE; 

索引的设计原则

适合创建索引的情况


1. 字段的数值有唯一性的限制
2. 频繁作为 WHERE 查询条件的字段
3. 经常 GROUP BY 和 ORDER BY 的列
4. UPDATE、DELETE 的 WHERE 条件列
5.DISTINCT 字段需要创建索引
6. 多表 JOIN 连接操作时,创建索引注意事项
7. 使用列的类型小的创建索引 
8. 使用字符串前缀创建索引
9. 区分度高(散列性高)的列适合作为索引 
10. 使用最频繁的列放到联合索引的左侧
11. 在多个字段都要创建索引的情况下,联合索引优于单值索引 

不适合创建索引的情况


1. 在where中使用不到的字段,不要设置索引
2. 数据量小的表最好不要使用索引
3. 有大量重复数据的列上不要建立索引
4. 避免对经常更新的表创建过多的索引 
5. 不建议用无序的值作为索引
6. 删除不再使用或者很少使用的索引 
7. 不要定义冗余或重复的索引 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值