7 流程控制、索引


一 流程控制

if判断

if i = 1 THEN
       SELECT 1;
ELSEIF i = 2 THEN
       SELECT 2;
ELSE
       SELECT 7;
END IF; 

while循环

SET num = 0 ;
WHILE num < 10 DO
    SELECT
        num ;
    SET num = num + 1 ;
END WHILE ; 

二 、索引

1.索引的定义

简单的理解为可以帮助你加快数据查询速度的工具,
索引:就是一种数据结构,类似于书的目录。

数据都是存在与硬盘上的,查询数据不可避免的需要进行IO操作

意味着以后在查询数据的应该先找目录再找数据,而不是一页一页的翻书,从而提升查询速度降低IO操作

我们在查询数据的时候如果使用的条件创建了索引则可以加速查询

如果没有创建索引则无法使用加速查询的功能

2.索引的分类

索引在MySQL中也叫“键”,是存储引擎用于快速查找记录的一种数据结构
1.primary key 主键索引除了有加速查询的效果之外 还具有一定的约束条件 2.unique key 唯一键索引 除了有加速查询的效果之外 还具有一定的约束条件 3.index key 普通索引 只有加速查询的效果 没有额外约束 # 注意外键foreign key 不是索引,不是用来加速查询的, 它仅仅是用来创建表与表之间关系的

本质:通过不断的缩小想要的数据范围筛选出最终的结果,同时将随机事件(一页一页的翻)变成顺序事件(先找目录、找数据),也就是说有了索引机制,我们可以总是用一种固定的方式查找数据

一张表中可以有多个索引(多个目录)

3.索引虽然能够帮助你加快查询速度但是也有缺点

1.当表中有大量数据存在的前提下 创建索引速度会很慢
2.在索引创建完毕之后 对表的查询性能会大幅度的提升 但是写的性能也会大幅度的降低

索引不要随意的创建!!!

4.算法

算法:解决事物的办法
入门级算法:二分法
二分法前提:数据集必须有序

5.数据结构

二叉树(只能分两个叉)
b树 
b
+树(叶子节点添加了指针)
b*树(枝节点也添加了指针) # 添加指针是为了加快范围查询的速度
精确查找取决于树的高度

将某个字段添加成索引就相当于依据该字段建立了一颗b+树从而加快查询速度
如果某个字段没有添加索引 那么依据该字段查询数据会非常的慢(一行行查找)

b+树:

只有叶子节点存放的是真实的数据 其他节点存放的是虚拟数据 仅仅是用来指路的

树的层级越高查询数据所需要经历的步骤就越多(树有几层查询数据就需要几步)

一个磁盘块存储是有限制的

为什么建议你将id字段作为索引

占得空间少 一个磁盘块能够存储的数据多

那么就降低了树的高度 从而减少查询次数

 

三、如何操作索引

创建唯一索引需要提前排查是否有重复数据
    select count(字段) from t1
    select count(distinct(字段)) from t1
查看当前表内部索引值
    show index from t1;
1.主键索引
alter table t1 add primary key pri_id(id);
2.唯一索引
alter table t1 add unique key uni_age(age)
3.普通索引
alter table t1 add index idx_name(name)

  (1).前缀索引(属于普通索引)

根据字段的前N个字符建立索引
避免对大列建索引,如果有就使用前缀索引 eg:博客内容 百度搜索内容等 alter table t1 add index idx_name(name(
4))

  (2).联合索引(属于普通索引)

 多个字段建立一个索引
相亲平台 搜索心仪对象的时候
例:
where a.女生 and b.身高 and c.体重 and d.身材好
index(a,b,c)
特点:前缀生效特性
a,ab,ac,abc,abcd 可以走索引或部分走索引
b bc bcd cd c d ba ... 不走索引

# 最左匹配原则(把最常用来做为条件查询的列放在最前面 gender money height beautiful alter table t1 add index idx_all(name,age,sex)

  6.删除索引

alter table t1 drop index 索引名(idx_name、idx_all...)
 

相关