zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Mysql入门技能树-索引

2023-09-14 09:13:33 时间

索引

索引入门

关于 MySQL 的索引,一下说法正确的是:

1.索引可以指定不同的格式,以满足不同的性能需求
2.索引可以伴有唯一约束
3.主键会自动包含聚集索引
4.聚集索引只能应用于自增字段
5.索引可以基于一个或多个字段
6.可以创建函数或表达式索引
7.MySQL 支持全文索引(Full Text Index)

在这里插入图片描述
答案是:D
聚集索引:在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。创建或重建聚集索引,会对硬盘中的数据重新排列
非聚集索引:非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页的数据按列排序。非聚集索引包含索引键值和指向表数据存储位置的行定位器。
索引:聚集索引/非聚集索引/条件索引/唯一索引/在计算列上建索引,实现“函数索引”的功能
主键:唯一,非空,索引(唯一索引,聚集或者非聚集索引,默认聚集索引)
外键:非唯一,可以为null ,索引
引自https://blog.csdn.net/thy822/article/details/105572075

创建索引

Joe 想给 Goods 表

create table goods(
    id int primary key auto_increment,
    category_id int,
    name varchar(256),
    price decimal(12, 4),
    stock int,
    upper_time timestamp
)

的 category_id (类别)字段创建索引,便于根据类别查询商品。应该执行下面哪个语句?
注意 一个类别会包含多种商品。
在这里插入图片描述
答案是:D
AC错在unique,题目说明一个类别会包含多种商品,所以并不能建唯一索引
B错在加的索引列不对
D可以换一种写法:

alter table goods 
    add  index idx_goods_category(category_id);

删除索引

Joe 想要删除创建在 goods 表创建的索引,但是他已经忘了这个索引的名字,那么他应该怎么做?
在这里插入图片描述
在这里插入图片描述
答案是:B
AC 不是drop,直接排除
D少了index
B可以换一种写法:

执行
show index from goods;
查看 goods 表的索引(假设查到是 idx_goods_category),然后执行
drop index idx_goods_category
			on  goods ;