索引与存储过程

1 索引

1).概念

        索引:是针对数据所建立的目录

        作用:可以加快查询速度

        负面影响:降低了增删改的速度。

2).案例

        设有新闻表15列,10列上有索引,共500W行数据,如何快速导入?

        1.把空表的索引全部删除

        2.导入数据

        3.数据导入完毕后,集中建索引。

3).索引的创建原则:

        1.不要过度索引

        2.在where条件最频繁的列上加

        3.尽量索引散列值,过于集中的值加索引意义不大。

4).索引的类型

        普通索引:index仅仅是加快查询速度。

        唯一索引:unique index 行上的值不能重复

        主键索引:primary key 不能重复

                 主键必唯一,但是唯一的索引不一定是主键。

                 一张表上,只能有一个主键,但是可以用一个或多个唯一索引

        全文索引:fulltext index

5).查看索引

        show index from 表名

6).建立索引

        Alter table 表名 add index/unique/fulltext[索引名](列名)

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

        id int primary key auto_increment 创建一个递增的主键id;

7).删除索引

        删除非主键索引:Alter table 表名 drop index 索引名;

        删除主键:alter table 表名 drop primary key

2 全文索引

1).用法

        Match(全文索引名)against('keyword');

        切记 只有>=3行的数据进行搜索才会有结果!

        以前在Myisam数据库引擎中支持全文本搜索,但是现在5.5版本的innodb也开始支持了 

        create table 列名(     

        )engine = myisam;

2).关于全文索引的停止词

        全文索引不针对非常频繁的词做索引,

        如thisis,you,my等等

        全文索引:在mysql的默认情况下,对于中文意义不大。

        因为英文有空格,标点符号来拆成单词,进而对单词进行索引,

        而对于中文,没有空格来隔开单词,mysql无法识别每个中文词。

3 存储过程

1).概念

        类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过该存储过程来实现

        在封装的语句体里面,可以用if/else,case,while等控制结构,可以进行sql编程

2).查看现有的存储过程

        show procedure status

3).删除存储过程

        Drop procedure 存储过程的名字

4).调用存储过程

        Call 存储过程名字();

    -->第1个存储过程,体会“封装sql”

        create procedure p1()

        begin

            select * from g;

        end$

    -->第2个存储过程,体会“参数”

        create procedure p1(n int)

        begin

            select * from g where num > n;

        end$

    -->第3个存储过程,体会“控制结构”

        create procedure p1(n int,j char(1))

        begin

            if j = 'h' then 

            select * from g where num > n;

            else

            select * from g where num < n;

            end if;

        end$

    -->计算1->n的和

        create procedure p4(n smallint)

        begin

             declare i int;

             declare s int; 

             set i = 1;

             set s = 0;

             while i <= n do

                 set s = s + i;

                 set i = i + 1;

             end while;

            select s;

        end$

    -->在mysql中,存储过程和函数的区别:

        一个是名称不同,

        二个就是存储过程没有返回值.
展开阅读全文

没有更多推荐了,返回首页