索引以及存储过程和存储函数介绍

索引

   索引用于快速找出在某个烈中有一特定值的行。不使用索引,就必须从第一条记录开始读完整个表,知道找出相关的行。数据越多,查找的时间越多。如果表中查询的列有一个索引,那么就能快速到达某个位置去搜寻数据文件,而不必查找所有的数据。例如,数据库有2万条记录,要执行这样一个查询:select * from table where num=1000,那么就要遍历整个表寻找这一行,但如果在num列上创建一个索引,那么MySQL不需要任何扫描,直接在索引里面找到1000,速度将会大大提高。
   索引分类:普通索引和唯一索引、单列索引和组合索引、全文索引、空间索引

创建索引

创建表时创建索引

   使用create table 创建表时,除了可以定义列的数据类型外,还可以定义主键约束、外键约束或者唯一性约束。在定义约束的同时就相当于在指定列上创建了一个索引。
  1. 创建普通索引。只需要在创建表时,在后面加上index(列名)即可
  2. 创建唯一索引,主要原因是减少查询索引列操作的执行时间,尤其是对比较庞大的数据表。只需在创建表时在后面加上unique index uniqidx(列名)即可
  3. 创建单列索引,是在单个字段上创建的索引,一个表可以创建多个单列索引,只需要在创建表时,在后面加上index(列名)即可
  4. 创建组合索引。只需要在创建表时,在后面加上index(列名1,列名2,...)即可
  5. 创建全文索引,可用于全文搜索,只有MyISAM存储引擎支持fulltext索引,并且只为char、varchar、text列创建索引。只需要在创建表时,在后面加上fulltext index(列名)即可,引擎记得在创建表之后加上engine=MyISAM;
  6. 创建空间索引,必须在MyISAM类型的表创建,且字段必须非空,只需要在创建表时,在后面加上spatial index(列名)即可,引擎记得在创建表之后加上engine=MyISAM;

在已经存在的表中创建索引

使用alter table 语句创建

语法规则:alter table 表名 add [unique|fulltext|spatial] [index] [索引名字] (列名)

使用create index语句创建

语法规则:create [unique|fulltext|spatial] index 索引名 on 表名 (列名)

删除索引

  1. 使用alter table删除:alter table 表名 drop Index 索引名
  2. 使用drop index删除:drop index 索引名 on 表名

存储过程与函数

   存储程序包括存储过程和存储函数。MySQL创建存储过程和函数使用的语句分别是:create procedure 和create function。

创建存储过程和函数

创建存储过程

语法规则:
create procedure 存储过程的名字 (参数) begin 要执行的语句; end;
参数包括 in|out|inout。
下面就是创建了一个查看fruits表的存储过程,每次调用这个存储过程就会执行select语句查看表的内容。括号里没有过程的参数,但仍然需要括号:

图1
注:利用delimiter将结束符号变成//,以避免跟默认的结束符;冲突。再利用delimiter ; 就可以变回了分号。

创建存储函数

语法规则:
create function 存储函数的名字 (参数) returns 返回数据的类型,如char(50) return (要返回值而需执行的语句);
参数包括 in|out|inout。
下面创建了一个存储函数namezip,参数定义为空,返回一个int类型的结果,代码如下:
图2
注:指定参数为in|out|inout只对procedure是合法的,function 总是默认为in参数。returns 子句只能对function指定,对函数而言是强制的。

调用存储过程和函数

调用存储过程

存储过程用call语句进行调用
语法:call 存储过程的名称 (存储过程对应的参数赋值)

调用存储函数

存储函数用select语句进行调用
语法:select 存储函数的名称 (存储函数对应的参数赋值)

查看存储过程和函数

使用show create 语句查看存储过程和函数的定义

show create {function|procedure}  名字

使用show status 语句查看存储过程和函数的状态

show {procedure|function} status like '过程或函数的名称'

information_schema.Routines表中查看存储过程和函数的信息

MySQL中存储过程和函数的信息都在information_schema数据库下的Routines表中。
语法规则:select * from information_schema.Routines where ROUTINE_NEMA=''sp_name

修改存储过程和函数

语法规则:alter procedure|function 名字 [特性]
特性一般包括:
图3
例如:修改存储过程countproc的定义,将读写权限改为modifie sql data,并指明调用者可以执行,代码如下:
图4

删除存储过程和函数

使用drop:drop [procedure|function] 名字

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
索引存储和散列存储是常见的数据结构存储方式,它们有以下区别: 1. 存储方式: 索引存储索引存储是一种间接存储方式,数据元素存储在数据区中,而索引存储索引表中。索引表中的每个索引项包含一个关键字和一个指向数据区的指针,用于快速定位数据元素。 散列存储:散列存储是一种直接存储方式,数据元素存储在散列表中,散列表中的每个位置称为一个槽,每个槽中可以存储一个数据元素。散列函数将关键字映射到散列表中的槽,用于快速查找数据元素。 2. 存取效率: 索引存储索引存储的存取效率较高,因为可以通过索引表中的关键字快速定位到数据元素。 散列存储:散列存储的存取效率也很高,因为可以通过散列函数快速定位到数据元素。 3. 冲突处理: 索引存储索引存储中的冲突处理一般采用链式法,即将哈希值相同的数据元素存储在同一条链表中。 散列存储:散列存储中的冲突处理一般采用开放地址法,即将哈希值相同的数据元素存储在散列表的其他位置中。 4. 存储空间: 索引存储索引存储需要额外的索引表来存储索引,因此需要更多的存储空间。 散列存储:散列存储不需要额外的索引表,只需要散列表和散列函数即可,因此需要较少的存储空间。 因此,索引存储适用于静态数据集合,数据集合更新较少的情况,而散列存储适用于动态数据集合,数据集合更新较频繁的情况。在实际应用中,我们需要根据具体的问题选择合适的存储结构来提高数据的存储和访问效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值