Mysql索引概念和存储过程

来源:互联网 发布:南风知我意在线阅读 编辑:程序博客网 时间:2024/05/01 07:58


索引

索引算法

1.二叉树索引,时间复杂度O(lgN)。
2.哈希表,时间复杂度O(1)。

索引原则:

1.不过度索引
2.索引条件列(where后面最频繁的条件比较适宜索引)
3.索引散列值,过于集中的值不要索引。例如:给“男”“女”索引,意义不大。


索引缺点:

降低了增删改的速度(update/delete/insert)
增大了表的文件大小(索引文件甚至可能比数据文件还要大)

索引分类:

普通索引(index):仅仅是加快查询速度
唯一索引(unique index):行上的值不能重复
主键索引(primary key):主键不能重复,主键索引必唯一,但是唯一索引不一定是主键
全文索引(fulltext index):检索速度快,多服务器负荷降低

关于全文索引的用法:它是针对文章中每一个词进行索引 
match (全文索引名) against ('keyword');

关于全文索引的停止词:全文索引不针对非常频繁的词做索引,
如this,is,you,my等等

全文索引对中文的意义不大,因为中文一句话不能区分词。

查看索引

show index from  表名;

show index from member \G 
注意没有分号,有分号会报错。\G代表横着显示


建立索引

alter table 表名 add index /unique/fulltext等  (索引名);
索引名可以不加

alter table 表名 add primary key(列名);         //不要加索引名,因为主键只有一个

删除索引


alter table 表名 drop index 索引名;    //删除普通索引
alter table 表名 drop primary key;     //删除主键索引


存储过程

存储过程
概念类似于函数,就是把一段代码封装起来
当要执行这一段代码的时候,可以通过调用该存储过程来实现。
在封装的语句体里面可以用if/else,case,while等控制结构
由于mysql 列本来就可以当变量看,所以有控制结构有列就可以当作编程了...

查看现有存储过程:show procedure status;

创建存储过程:见下面

删除存储过程:drop procedure 存储过程名

调用存储过程:call 存储过程名();           //是小括号,可以放参数
如果要调用上面创建的存储过程,用call p1()$    即可,$是因为修改了delemiter。

举例:
1.不带参数
create procedure p1()
begin
select * from g
end$
调用方式:call p1()$

2.带参数      
create procedure p2(n int) begin select * from g where num > n end$        调用方法:call p2(10)$

3.加上控制结构if
create procedure p2(n int, j char(1))
begin
if j == 'h' then
select * from g where num > n;
else
select * from g where num < n;
endif                //注意sql里面if/else后面有endif
end$

4.计算1->n的和,while



所以,存储过程实际上可以理解为函数,只是没有返回值!
      


0 0
原创粉丝点击