首页 > 其他分享 >索引的基础使用

索引的基础使用

时间:2022-11-20 22:26:54浏览次数:39  
标签:name dept -- 基础 主键 索引 使用 id

索引:

分类:

  1. 功能逻辑:普通索引、唯一索引、主键索引、全文索引
  2. 物理实现方式:聚簇索引,非聚簇索引
  3. 作用字段个数:单列索引,联合索引

索引创建:

--主键索引
CREATE TABLE dept(
dept_id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(20)
);
--emp_name 唯一索引,emp_dept_id 外键
CREATE TABLE emp(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(20) UNIQUE,
dept_id INT,
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
)

查看表索引:

show index from book;

Non_unique :0(唯一索引),1(不是唯一索引)

性能分析:

EXPLAIN SELECT * from book where book_name = 'mysql高级'

唯一索引(unique): 插入的数据不能重复,但是可插入索引字段为null,且可重复多次

主键索引(primary key):可以删除主键索引,如果主键索引有Auto_increment约束字段的唯一索引则不能删除;

  1. 设定为主键后数据库会自动建立索引,innodb为聚簇索引
  2. 修改主键索引:必须先删除掉(drop)原索引,再新建(add)索引
alter table xxxx DROP PRIMARY KEY

联合索引:具有最左原则

CREATE TABLE test3(
id INT(11) NOT NULL,
name CHAR(30) NOT NULL,
age INT(11) NOT NULL,
info VARCHAR(255),
INDEX multi_idx(id,name,age)
);

img

联合索引的顺序严格按照创建时顺序执行。

联合索引的具体体现:

EXPLAIN SELECT * from test3 where  id = 10001 and age = 22;

EXPLAIN SELECT * from test3 where  age = 22

img

img

由上述解释器可以看出,第一条sql执行,由索引参与,但第二条sql略过id直接查询name,则联合索引失效

possible_keys:

  • 查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

key:实际使用的索引,如果为NULL,则没有使用索引

simple:简单SELECT(不使用UNION或子查询等)

index_type:存储引擎类型

创建普通表:索引的其他设置方式

CREATE TABLE test4 (
	id INT ( 11 ) NOT NULL,
	NAME CHAR ( 30 ) NOT NULL,
	age INT ( 11 ) NOT NULL,
	info VARCHAR ( 255 )
)
--创建单列索引
alter table test4 add  index idx(id);
--创建唯一索引
ALTER TABLE test4 add UNIQUE index uk_idx_name(name);
--创建联合索引
ALTER TABLE test4 add index mul_id_name_info(id,name);
--创建主键索引
alter table test4 add PRIMARY KEY idx_pri(id)

删除索引及新特性

--删除索引
ALTER table book1 drop index uk_idk_cmt;
--删除索引中的字段(可将联合索引降至单列索引)
alter table test3 drop COLUMN name

支持降序索引和隐藏索引

MySQL8.0之前创建的索引是升序索引,使用时反向扫描,效率低;MySQL8.0之后支持降序索引。

CREATE TABLE ts1(a int,b int,index idx_a_b(a,b desc));

show create table ts1;

--结果看:索引已经是降序了
-- ts1	CREATE TABLE `ts1` (
--   `a` int DEFAULT NULL,
--   `b` int DEFAULT NULL,
--   KEY `idx_a_b` (`a`,`b` DESC)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

隐藏索引:软删除(invisible(不可见性),visible(可见性)),如果设置的隐藏索引对系统无影响,则可删除该索引;

主键不能被设置为隐藏索引当表中没有显式主键时,表中第一个唯一非空索引会成为隐式主键,也不能设置为隐藏索引。

注意:当索引被隐藏时,它的内容仍然是和正常索引一样实时更新的。如果一个索引需要长期被隐藏,那么可以将其删除,因为索引的存在会影响插入、更新和删除的性能。

标签:name,dept,--,基础,主键,索引,使用,id
From: https://www.cnblogs.com/xbhog/p/16909785.html

相关文章

  • gpu-jupyter使用说明
    目录宿主机安装driver测试nvidia-smi驱动使用gpu-burn测试gpugub-burn的dockerfile赠送的一些tf简单代码宿主机安装driver#禁用宿主机自带显卡驱动......
  • 2022-2023—1 20221306《计算机基础与程序设计》第十二周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11作业目标:学习《C语言程序设计》......
  • golang中io的使用
    一、读取小文件:ioutil.ReadFile()读取文件的内容并显示在终端(使用ioutil一次将文件读取到内存中),这种方式适用于读取小文件:packagemainimport("fmt""io/iou......
  • Token和axios拦截器的初步了解和使用
    token为什么要有token默认情况下,HTTP是一个无状态协议,也就是说任何客户端浏览器都可以访问服务器,但是服务器并不能知道浏览器到底是属于哪个用户的。当客户端多次向服务......
  • SQLmap使用手册
    SQLmap使用手册参考连接https://www.tr0y.wang/2018/03/21/sqlmap-guide/#SQLmap-介绍SQLmap介绍什么是SQLmapSqlmap是由Python写成的,开源的自动化SQL......
  • 11基础元器件-电源转换器件
    一、电源转换的用途1、用于转换电压值,将高电压转换为低电压或者将低电压转换为高电压。2、用于稳压,使得输出的电压值稳定,适合于单片机或者板的其它地方使用。3、用于隔离......
  • msf使用记录
    使用记录参考资料https://xz.aliyun.com/t/3007得到会话,上传文件upload/root/360rd.exec:/ProgramData 大小写 #上传文件到目标机上执行exeexecute......
  • WordPress 特色封面图像开启与使用
    wordpress特色图像可以用于分类页面或者网站首页调用文章缩略图时,指定调用某张图片,实现自定义封面的效果。WORDPRESS程序默认是不支持特色图像功能,所以我们需要开启特色图......
  • BurpSuite使用指南-使用Burp Spider
    使用BurpSpider存在于BurpTarget中的站点信息,我们可以直接传送到BurpSpider中进行站点信息的爬取新版本是没有单独的spider功能新建一个扫描任务输入扫描的网址选择快速......
  • python3-基础篇-11-文件操作
    python中多file的操作:1使用open()方法用于打开一个文件,并返回文件对象(打开文件,得到文件句柄并赋值给一个变量)2.通过文件对象对文件进行一系列操作(通过句柄对文件进行操作)3......