1、索引:针对数据所建立的目录
好处,加快了查询速度
坏处,降低了增删改的速度,增大了表的文件大小(索引文件可能比数据文件还要大)
操作大量数据时最好:先去掉索引,再导入,最后统一加索引
案例:设有新闻表15列,10列上有索引,共500w行数据,如何快速导入?
- 把空表的索引全部删除
- 导入数据
- 数据导入完毕后,集中建索引
索引使用原则:
- 不过度索引
- 索引条件列(where后面最频繁的条件比较适宜索引)
- 索引散列值,过于集中的值不要索引
索引类型:
- 普通索引:index 仅仅加快查询速度
- 唯一索引:unique index 行上的值不能重复
- 主键索引:primary key 不能重复
- 全文索引:fulltex index
主键必唯一,但是唯一索引不一定是主键;
一张表上,只能有一个主键,但是可以有一个或多个唯一索引
查看一个表上的所有索引:show index from 表名;
建立索引:
alter table 表名 add index/unique index/fulltex index 索引名(列名)
alter table 表名 add primary key (列名) //不要加索引,因为主键只有一个
删除非主键索引:
alter table 表名 drop index 索引名;
删除主键索引:
alter table 表名 drop index primary key;
全文索引用法:
select * from 表名 where match(列名) against('要匹配的词或句子');
select id ,email,match(列名) against('要匹配的词或句子') from 表名;//显示匹配度
**关于全文索引的停止词:**全文索引不针对非常频繁的词做索引,如this,is,you,my等
全文索引:在mysql的默认情况下,对于中文意义不大
因为英文有空格,标点符号来拆成单词,进而对单词进行索引,而对于中文,没有空格来隔开单词,mysql无法识别每个单词
2、存储过程:
类似于函数,就是把一段代码封装取来,当要执行这一段代码的时候,可以通过调用该存储过程来实现。在封装的语句体里面,可以用if/else,case,while等控制结构。可以进行mysql编程。
查看现有的存储过程:
show procedure status \G; #\G 为横向显示
删除存储过程:
drop procedure 存储过程的名字;
创建存储过程:
- 简单创建
create procedure p1()
begin
select * from g;
end&
调用:
call p1()&
- 传参
create procedure p2(n int)
begin
select * from g where num >n;
end&
call p2(10)&
-
控制结构
create procedure p3(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&
call p3(10,'h')&
-
循环结构
create procedure p4(n smallint)
begin
declare i smallint;
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&
call p4(100)&
在mysql中,存储过程和函数的区别:
- 名称不同
- 存储过程没有返回值