mysql的索引和存储过程

本文围绕MySQL展开,介绍了索引和存储过程相关知识。索引可加快查询速度,但会降低增删改速度、增大表文件大小,还阐述了使用原则和类型。存储过程类似函数,可封装代码,文中说明了查看、删除和创建存储过程的方法,以及与函数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

好处,加快了查询速度
坏处,降低了增删改的速度,增大了表的文件大小(索引文件可能比数据文件还要大)
操作大量数据时最好:先去掉索引,再导入,最后统一加索引

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

  1. 把空表的索引全部删除
  2. 导入数据
  3. 数据导入完毕后,集中建索引

索引使用原则:

  1. 不过度索引
  2. 索引条件列(where后面最频繁的条件比较适宜索引)
  3. 索引散列值,过于集中的值不要索引

索引类型:

  • 普通索引: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 存储过程的名字;

创建存储过程:

  1. 简单创建
create procedure p1() 
	begin    
		select * from g; 
	end&

调用:

call p1()&
  1. 传参
create procedure p2(n int)
 	begin    
 		select * from g where num >n; 
 	end&
call p2(10)&
  1. 控制结构

    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')&
    
  2. 循环结构

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中,存储过程和函数的区别:

  1. 名称不同
  2. 存储过程没有返回值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值