Mysql数据库优化

(一)数据库设计方面
  1. 建立适当的索引优化查询,避免全表扫描。例如在where、order by的字段上建立索引;
  2. 使用” is null”对字段值是否为空进行判断会导致查询放弃索引进行全表扫描,所以可以设置字段默认值防止字段值为null;
  3. 如果一个字段有大量的重复值,如性别,这样的字段就算设置了索引查询时也不会起作用,所以这类型的字段可以考虑不要设置索引;
  4. 索引并不是越多越好:一方面数据库维护索引是要付出代价的;另一方面插入、删除操作可能导致数据库更新索引,所以索引时要适当。通常一个表最多设置6个索引;
  5. 尽量避免频繁的更新索引列的数据,这样会导致索引的频繁更新,耗费巨大代价;
  6. 设计数据库字段时可以使用数值型的就不要设置为字符串型,因为数据库在对字符串型数据进行比较时会依次比较每一个字符,数值型只需要比较一次;
  7. 使用varchar代替char;
  8. 避免频繁创建和删除临时表,以减少系统表资源的消耗;
  9. 新建临时表如果一次性插入数据量很大,可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert;
  10. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
(二)SQL优化
  1. 避免在where子句中使用“!= ”和“<>”,这样会导致放弃查询索引进行全表扫描;
  2. 在where子句中使用“union all”代替“or”,因为后者会导致放弃查询索引进行全表扫描;
  3. 慎用“in”和“not in”,因为会导致放弃索引进行全表扫描;
  4. where子句中对连续的数值的判断,可以考虑使用”between”;
  5. 模糊查询会导致放弃查询索引,进行全表扫描;
  6. 避免在where子句中对字段进行表达式操作,这样会导致放弃索引,进行全表扫描;
  7. 避免在where子句中字段进行函数操作,这样会导致放弃索引,进行全表扫描;
  8. 如果需要生成空表结构,应使用create建表而不是在where子句中写永远不会成立的表达式等;
  9. 可以考虑使用exists代替in;
  10. 禁止使用“select *”查询不必要的字段;
  11. 避免一次性向客户端返回大量数据,考虑使用分页等设计;
  12. 只需要一条记录时使用“limit 1”限制;
  13. 对特定的字段设计特定的数据类型:如使用ENUM代替varchar设置一些有固定取值的字段;使用UNSIGNED INT存储ip地址而不是varchar(15);
编程优化
  1. 将大数据量的操作尽量不放在ORM框架中操作;
  2. jdbc对数据库的操作效率会高于ORM框架;
  3. 合理的使用缓存技术减少对数据库的直接访问。
硬件优化
  1. 数据库服务器与应用服务器分离;
  2. 调高数据库服务器的吞吐量;
  3. 网络原因也是影响数据库访问的一个必要因素。

本文参考自:[https://mp.weixin.qq.com/s__biz=MzI1NDQ3MjQxNA==&mid=2247483799&idx=1&sn=4a97af67bf0e9d36fb1a80a3670e7ab6&chksm=e9c5f826deb2713008ef2a018b756c3a99bfe5c23b14cee2aa48dae2a484df0d6584927fd266&scene=21#wechat_redirect],如有侵权,请联系本人删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值