索引
索引算法
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 表名 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
所以,存储过程实际上可以理解为函数,只是没有返回值!