一:索引
二:视图
三:存储过程与存储函数
一:索引
索引的本质就是目录,在MySQL中主要是通过B+树这种数据结构实现,作用是提高了数据库的查询效率
B树(BTree)
B+树(B+Tree)
虽然说B+树是由B树变种而来的,但本质上B+树与B树是两种数据结构
B树的数据是存放在各个节点中的,而B+树的所有数据都存放在叶子节点中,其非叶子节点本质上只是叶子节点的索引
MySQL中的B+Tree
在原B+Tree的基础之上,增加了一个链表指针在其叶子节点之间,以提高区间访问的性能
索引的分类单列索引(表中的每一列都建一个索引)
唯一索引(唯一值单列索引,即当表中一个列的值都唯一,则可以建唯一索引)
复合索引(一个索引代表多个列)
MySQL的主键索引
通常我们在MySQL中建立索引的时候不考虑主键,因为在MySQL中,数据库本身就自动为主键列提供了一个索引(所以,通过主键进行查询数据是很快的)
SQL:索引语法
创建索引
查看索引
删除索引
使用ALTER关键字创建索引
索引创建原则经常被查询、数据量较大的表,其字段适合创建索引
经常被用于查询的字段(即,经常出现在where子句中的字段)
对于建立了索引的字段来说,每次增、删、改都需要对索引进行维护,所以虽然索引可以增加查询的效率,但是会减低CUD的效率(这也是第一点的原因)
善于利用复合索引(最左索引)
二:视图
视图的本质就是一条select语句执行后返回的结果集
SQL:视图语法
创建视图查询视图:语法与查询表一样更新视图:语法与更新表一样不建议对视图进行更新,因为跟新视图数据时,本质还是更新表的数据,视图主要的作用是提高查询效率,如果需要更新数据应该直接到表里进行更新
修改视图
查看视图
删除视图
三:存储过程、存储函数
存储过程/函数的本质就是一个包含了SQL语句的“方法”,其作用是减少程序与数据库的交互次数从而提高程序对数据库的访问效率
SQL:存储过程基本语法
创建存储过程
调用存储过程
查看存储过程(查看该数据库中有哪些存储过程)
删除存储过程
SQL:存储过程编程语法
在存储过程中是可以进行编程的,其相关语法如下
变量declare关键字(声明变量)Set关键字(为变量赋值)select … into(为变量进行赋值(不太好用))
if条件判断
示例:
参数
参数类型:in:输入参数,默认类型
out:输出参数,可以视为“返回值”inout:既可以作为输入参数,也可以作为输出参数
case结构
示例:
while循环(三个循环里,while循环最好用)
示例:
repeat循环
示例:
loop循环
示例:
游标(光标)
游标是用来存放查询结果集的,其本质类似于JavaSE中的集合,可以从游标当中读取到数据fetch:每执行一次fetch,游标内的“指针”就会自动向下移动一行
循环提取游标内的数据,除了上面那个例子外,还可以利用 count() 函数获取查询结果集中的条数,再使用while循环提取数据
SQL:存储函数基本语法
存储过程与存储函数除了创建的语法与返回值的差别外,其余的基本语法与编程语法都是一样的,所以上面所有的存储过程的编程语法在存储函数中都适用
示例:
因为函数有返回值,所以使用 select 查询语句来调用函数: