MySQL索引优化系列:(一)索引的类型

SQL(结构化查询语言)


SQL 是用于访问和处理数据库的标准的计算机语言

结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。例如:CREATE DATABASE - 创建新数据库

二、索引分类

=========================================================================

mysql的索引我们分为三大类来讲单列索引(普通索引,唯一索引,主键索引)、组合索引(联合索引/多列索引)、全文索引

索引


简单来说,索引就是一个指针,指向表里的数据。

  • 索引通常与相应的表时分开保存的,目的是提高检索的性能。

  • 索引的创建与删除不会影响数据本身,但会影响数据检索的速度。

  • 索引也会占据物理存储空间,可能比表本身还大,因此创建索引也要考虑存储空间。

单列索引


普通索引

没有任何限制,允许在定义索引的列中插入重复值和空值,创建一个单列索引的2种方式:

1]create index index_name on tbl_name(index_col_name)

2]alter table 表名 add index index_name on(index_col_name)

这里,create index表示创建一个索引,index_name表示索引的名称,on tbl_name表示要创建索引的表, index_col_name表示表中要创建索引的列

唯一索引

索引列中的值必须是唯一的,但是允许为空值,也就是不允许具有索引值相同的行。

CREATE UNIQUE CLUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

这里,CLUSTERED INDEX是用来建立聚簇索引的关键字,此语句的意思是在表mytable上的mycolumn字段上创建一个名为myclumn_cindex的聚簇索引,且为唯一索引。

主键索引

是一种特殊的唯一索引,不允许有空值。简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。

可以这样来记忆:主键=主键索引=聚集索引

实例:一般id作为表的主键

PRIMARY KEY (id),

组合索引(联合索引/多列索引)


联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树.

命名规则:表名_字段名

  • 1、需要加索引的字段,要在where条件中

  • 2、数据量少的字段不需要加索引

  • 3、如果where条件中是OR关系,加索引不起作用

  • 4、符合最左原则(where条件必须有联合索引的第一个字段)

例如:

CREATE TABLE test (

id int(4) NOT NULL AUTO_INCREMENT,

name varchar(10) NOT NULL,

age varchar(2) NOT NULL,

sex varchar(2) NOT NULL,

phone varchar(12) NOT NULL,

email varchar(25) NOT NULL,

PRIMARY KEY (id),

UNIQUE KEY idx_name_age_sex (name,age,sex) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

这就是联合索引:

idx_name_age_sex (name,age,sex)

使用组合索引时遵循最左前缀集合,这里由name、age和sex个字段构成的索引,索引行中就按name/age/sex的顺序存放,索引可以索引下面字段组合(name,age,sex)、(name,age)或者(name)或者(name,sex)。

举例具体的sql,以下都会走联合索引的:

select * from test where name = ‘张三’ and age = ‘18’ and sex = ‘男’;

select * from test where name = ‘张三’ and age = ‘18’;

select * from test where name = ‘张三’ ;

select * from test where name = ‘张三’ and sex = ‘男’;

select * from test where and sex = ‘男’ and age = ‘18’ name = ‘张三’;

注意,第5条sql语句是可以执行的,联合索引与where条件的顺序无关!

然后看几个不会走联合索引的:

select * from test where and age = ‘18’ and sex = ‘男’;

select * from test where and age = ‘18’ or sex = ‘男’;

select * from test where and age = ‘18’ ;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

腾讯T3大牛总结的500页MySQL实战笔记意外爆火,P8看了直呼内行

腾讯T3大牛总结的500页MySQL实战笔记意外爆火,P8看了直呼内行
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

最后

[外链图片转存中…(img-QCxfKSYO-1711803401849)]

[外链图片转存中…(img-Fmnx7HF4-1711803401850)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值