sql优化

sql优化

索引

1、在插入修改删除较多的表上尽量避免建立索引
2、在where语句左边尽量少用通配符,如“WHERE A.NAME LIKE ‘%AAA%’”会使索引失效,而“WHERE A.NAME LIKE ‘AAA%’”则不会

create (unique 唯一索引字段) index 自定义索引名 on 表名(字段名)

存储过程

1、不需要人工干预
2、高性能,执行一次后执行规划驻留在高速缓冲储存器中
3、减少网络流量

- 创建存储过程
CREATE 存储过程的名称(参数)
BEGIN
...需要执行的SQL语句
END

- 调用
CALL 存储过程的名称(参数)

例:

CREATE PROCEDURE p_student_select(参数)
BEGIN 
SELECT * FROM student;
END

CALL p_student_select(参数)

sql语句来自于https://blog.csdn.net/ht_vIC/article/details/121372997

存储函数

1、存储函数只有一个返回参数而存储过程可以拥有多个返回参
2、可以直接调用,不需要call
3、必须含有return

CREATE FUNCTION 表名(参数)

RETURNS 所有mysql适用的数据类型

[NOT] DETERMINISTIC statements

例:

CREATE FUNCTION demo()

RETURNS CHAR(50)

RETURN ( SELECT s_name FROM suppliers WHERE s_call='48075');
DELIMITER ;

触发器

1、保持数据的一致性、完整性和正确性
2、只要增删改的语句可以执行,触发器也要执行

CREATE TRIGGER T2 -- 触发器名称
	ON Teacher   --触发器的表或视图
	FOR INSERT,UPDATE  --添加和修改时触发
	AS DECLARE @TAGE TINYINT    --定义年龄变量
	DECLARE @TSEX varchar(2)	--定义性别变量
	DECLARE @TPROF varchar(10)  --定义职称变量 
	SELECT @TAGE=Age FROM inserted  --插入表的查询
	SELECT @TPROF=Prof FROM inserted
	SELECT @TSEX=Sex FROM inserted
	if(@TSEX='男' and @TAGE>60) or
     (@TSEX='女' and @TAGE>60 and @TPROF='教授') or
     (@TSEX='女' and @TAGE>55 and @TPROF<>'教授')
     BEGIN
     PRINT '你输入的数据不满足要求,请核对后再进行输入!'
     ROLLBACK TRAN
     END
ELSE BEGIN
     PRINT '你输入的数据没有问题,数据已经插入数据库中!'
     COMMIT TRAN
END

事件

事件是基于时间周期执行某些任务,触发器则是基于某个表的事件所触发的

查看事件调度器是否开启(开启返回NO 关闭则返回OFF)
show variables like '%event_scheduler%'

开启调度器
set global event_scheduler=1

关闭调度器
set global event_scheduler=0

创建定时事件
creat event 事件名 on schdule every 时间 do update 字段名 set 参数
例:
creat event clear on schdule every 30second do update p.id set count=0

删除事件
drop event 事件名

视图

1、视图是一张虚拟表,不是真实的表
2、适用于多表联合、复杂的查询,在使用时直接查询该View即可
3、使用View可能会降低查询速度,可以提高硬件配置来缓解

CREATE VIEW 视图名 AS  select语句
select * from 视图名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值