mysql索引

mysql 索引

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

主键为默认索引,查询数据默认按照索引升序排列。无论插入顺序如何,一定会按照索引来排序查询(有序)。

索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花费的时间就越多。如果表中查询的列有索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

数据量少的或者经常需要更新的表就不需要用到索引。因为索引也是需要存储空间的

底层为单向链表结构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kDWhXMY6-1609662059925)(C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609033024782.png)]

扫描表就是最慢的一种方式

页目录保存的是索引。如果我查询 a < 3 ,我就会先在页目录里查询 4 以下的 ,查询到对应的页目录之后在查询响应下面的索引。就不会查询大于4 的数据。这就是索引快的原因

  1. 聚集索引:每个表只有一个聚集索引,那就是主键,聚集索引会把表中的每行数据存储到索引的叶子节点中。(就是跟图片一样,存储到1 后面,再分节点存储数据)。
  2. 普通索引: 新建索引都是普通索引,只有主键是聚集索引。普通索引保存的是行号,并不是保存的值。
  3. 覆盖索引 :当查询列表和索引列是一致的,就是覆盖索引。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VoSn9bNk-1609662059926)(C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609043801248.png)] 在这里插入图片描述

C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609043274084.png

解析顺序:

C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609064076247.png

union all和union的区别 怎么使用 :

一、区别bai1:取结果的交集

1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;

2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;

二、区别2:获取结果后的操作
1、union: 会对获取的结果进行排序操作

2、union all: 不会对获取的结果进行排序操作

使用要求:

(1)各个select查询语句中,各个select查询的列数的个数必须相同,不能1个select查询的列数是4列,而另一个select查询的列数是7列。

(2)各个select查询语句中,每个列的数据类型必须相同或相似。不能1个select的第1列是int类型,而另一个select的第1列是nvarchar类型。

组合索引:

创建组合索引

CREATE TABLE tab3(
id INT(4) NOT NULL,
name CHAR(20) NOT NULL,
age INT(3) NOT NULL,
info VARCHAR(255),
INDEX multiIdx(id,name,age)
);

使用组合索引要遵循最左前缀原则:

最左前缀:组合索引遵从了最左前缀,利用索引中最左边的列集来匹配行,这样的列集称为最左前缀。例如,这里由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引组合中的字段可以是(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成最左面的前缀原则,那么就不会用索引,比如,age或者(name,age)组合就不会使用索引查询。

查看索引的使用信息:

EXPLAIN SELECT * FROM tab3 WHERE id = 1 AND name = 'nana';

查询结果如图:

在已经创建好的表里添加索引:

ALTER TABLE book ADD INDEX BkNameIdx(name(30));

B + 树结构图

B+ 树特点 :

1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好

是有序的;

​ 2.不可能在非叶子结点命中;

​ 3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储

(关键字)数据的数据层;

​ 4.更适合文件索引系统;

mysql优化

在这里插入图片描述

(C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609657993973.png

使用索引要注意的内容

  1. 尽量使用全职匹配(遵循左前缀法则)

  2. 不要对索引列做任何的操作(计算,函数,类型转换)

  3. 范围条件后索引失效
    C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609657993973.png

    4.覆盖索引尽量使用C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609659267172.png

5.不等于要慎用

6.not null 对索引有影响

7.like 查询注意事项

以通配符开头索引会失效

C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609659495254.png

8.字符类型的引号不能省去,会进行自动类型的转换,索引失效
C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609659565789.png

9.尽量少使用 or ,用union 替代 or 查询

10.exit 替换in

C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\1609660057894.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值