MySQL进阶9

Posted xzx123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL进阶9相关的知识,希望对你有一定的参考价值。

自定义函数:

自定义函数:

技术分享图片

随机产生一个部门编号:

技术分享图片

 

 

索引:

索引用于快速找出在某个列中有一特定值的行

不使用索引mysql必须从第一条记录开始读完整个表,直到找出相关的行

表越大查询数据所花费的时间就越多

如果表中查询的列有一个索引mysql能够快速到达一个位置去搜索数据文件而不必查看所有数据,那么将会节省很大一部分时间

 

索引的优势与劣势:

优势:类似大学图书馆建书目索引,提高数据检索效率降低数据库的io成本,通过索引对数据进行排序降低数据排序的成本降低cpu的消耗

劣势:实际上索引也是一张表,该表保存了主键与索引字段并指向实体表的记录,所以索引列也是要占空间的,虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert,update,delete

 

索引的分类:

单值索引:即一个索引只包含单个列,一个表可以有多个单列索引

唯一索引:索引列的值必须唯一,但允许有空值

复合索引:一个索引包括多个列

index multiidx(列名1, 列名2...)

全文索引:只有在myisam引擎上才能使用,只能在char,varchar,text类型字段上使用全文索引

 

索引操作:

创建索引:

create index 索引名称 on table(column[, column]...);

技术分享图片

 删除索引:

drop index 索引名称 on 表名;

 

查看索引:

show index from 表名;

table:表名

non_unique:如果索引不能包括重复词,则为0,如果可以则为1

key_name:索引的名称

seq_in_index:索引中的列序列号

culumn_name:列名称

collation:列以什么方式存储在索引中,在mysql中有值‘A‘(升序)或null(无分类)

cardinality:索引中唯一值的数目的估计值,通过运行analyze table或myisamchk -a可以更新,基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的,基数越大当进行联合时,mysql使用该索引的机会就越大

sub_part:如果列只是被部分地编入索引则为被编入索引的字符的数目,如果整列被编入索引则为null

packed:指示关键字如何被压缩,如果没有被压缩则为null

null:如果列含有null则为yes,如果没有则为null

index_type:用过的索引方法(btree, fulltext, hash, rtree)

comment:索引备注信息

 

自动创建索引:

在表上定义了主键时会自动创建一个对应的唯一索引,在表上定义了一个外键时会自动创建一个普通索引

 

explain:

用来查看索引是否正在被使用,并且输出其使用的索引的信息

 

id:select识别符,这是select的查询序列号,也就是一条语句中该select是第几次出现,在次语句中select就只有1个,所以是1

select_type:所使用的select查询类型,simple表示为简单的select,不实用union或子查询就为简单的select

table:数据表的名字,他们按被读取的先后顺序排列

type:指定文本数据表和其他数据表之间的关联关系,该表中所有符合检索值的记录都会被取出来和从上一个表中取出来的记录作联合

key:实际选用的索引

possible_keys:mysql在搜索数据记录时可以选用的各个索引

key_len:显示了mysql使用索引的长度(也就是使用的索引个数),当 key 字段的值为null时,索引的长度就是null,注意key_len的值可以告诉你在联合索引中mysql会真正使用了哪些索引

 ref:给出关联关系中另一个数据表中数据列的名字

rows:mysql在执行这个查询时预计会从这个数据表里读出的数据行的个数

extra:提供了与关联操作有关的信息,没有则什么都不写

 

索引结构:

先会对数据行进排序

 

btree索引:

技术分享图片

B+树索引是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接

 

hash索引:

哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快

 hash 索引结构的特殊性其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引

 

需要创建索引的情况:

主键自动建立唯一索引

频繁作为查询条件的字段应该创建索引

查询中与其他表关联的字段外键关系建立索引

查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度

查询中统计或分组字段

 

不需要创建索引的情况:

频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引

where条件里用不到的字段不创建索引

表记录太少

如果某个数据列包含许多重复的内容为它建立索引就没有太大的实际效果

以上是关于MySQL进阶9的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础-10DQL语言(数据查询语言)-进阶9联合查询

MySQL进阶实战9,InnoDB和MyISAM的数据分布对比

MySQL进阶 9: 联合查询 - 查询语句1 union 查询语句2 union ...

Atom编辑器入门到精通 Atom使用进阶

超级有用的9个PHP代码片段

VSCode自定义代码片段9——JS中的面向对象编程