欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql数据库优化

程序员文章站 2022-06-02 12:18:42
...
(一)数据库设计方面
  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],如有侵权,请联系本人删除。