索引

索引算法


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




MySQL 时间索引创建要注意什么_全文索引





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