关于MYSQL DB操作性能问题总结

这几天在做课程表性能方面的测试,因为PSSDB 完全由SQL SERVER迁移到MYSQL, 存储过程基本全部重写遇到很多性能方面的问题都和DB操作有关,总结一下出现的问题:

1. DB操作类,同一方法里多次DB操作,类似于数据库里的事物处理,遇到同一用户高并发时容易出现问题。所以尽量用存储过程实现。

2. 建索引时,如果用到VARCHAR字段的索引可以这么建
ALTER TABLE PSS_SmsAppConfig ADD INDEX UserId_AppType (UserId,AppType,ConfigKey(12));
ConfigKey长度为varchar(60),这个字段的实际情况下的长度不会超过 12,这样固定小长度12的索引会加速索引查询速度,还会减少索引文件的大小,提高 INSERT 的更新速度。

3.关于组合索引,简单的理解就是只从最左面的开始组合。并不是所有组合查询都会用到该组合索引。
比如:一个四个字段的索引 UserId,AppType,BeginTime,EndTime
以下查询会用到索引
SELECT * FROM PSS_SmsApp WHERE UserId=?
SELECT * FROM PSS_SmsApp WHERE UserId=? and AppType=?
SELECT * FROM PSS_SmsApp WHERE UserId=? and AppType=? and BeginTime>? and ,EndTime<?
以下查询不会用到索引
SELECT * FROM PSS_SmsApp WHERE BeginTime>? and ,EndTime<?
检查代码里的SQL语句以及存储过程的WHERE条件是否会使用到索引,没有用到索引的容易出现性能问题,要多注意。

4.优化FOR 循环里的INSERT 操作
在FOR循环里的INSERT语句最好不要循环INSERT操作,可以拼SQL语句,改成一次DB操作能很大缓解DAL压力。咨询了炳锡最大不要超过300就没问题。
INSERT INTO table1(name,age) VALUES('test1',1),('test2',21),('test3',23) ;

5.存储过程里关于计算赋值或按计算值条件查询的时候,最好定义成变量,而不是每次都通过SQL语句执行获取值(多次被执行才有必要定义变量)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值