加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_运城站长网 (https://www.0359zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL常用优化

发布时间:2022-09-17 15:50:09 所属栏目:MySql教程 来源:
导读:  这份优化总结酝酿了有段时间了,主要始从自己目前在带领的一个项目当中吸取的、经历的,以及从自己了解到的一些实用的mysql语句或者设计方面的优化方案,特别是sql语句的书写方面。

  话不多说,直接开始。
  这份优化总结酝酿了有段时间了,主要始从自己目前在带领的一个项目当中吸取的、经历的,以及从自己了解到的一些实用的mysql语句或者设计方面的优化方案,特别是sql语句的书写方面。
 
  话不多说,直接开始。
 
  一、语句优化
 
  1、select时尽量不要用*。需要什么字段、多少字段则写多少。如果使用*,数据库还需要在执行完语句之后进行字段的转换。
 
  2、普通情况下少用group by。group by在表数据很大,几十万就开始表现出缓慢,几百万或者上千万则会达到十秒以上的缓慢(具体要视语句而定);一般可以通过关联查询或者distinct来代替一下,如果非要用group by,可以考虑对分组的字段添加索引。
 
  3、善用limit。limit的实用更多是在分页中使用,这里延生一种使用方式是:在查询结果明确了为一条或者只想获取第一条记录的话,可以加入 “limit 1”,不需要查询出来再get第一条记录。limit 1在查询到第一条记录后会停止查询,提高查询效率。
 
  4、灵活运用exist和in、not exist和not in 两组关键字。不深入讨论,简单的说一下使用场景:
 
  exist和in:假设有两个待查询的表,如果两个表的数据量相差不大,那么用in和exists差别不大;如果两个表中数据量一个较小一个较大,则子查询表大的用exists,子查询表小的用in;
 
  not exsit 和 not in:用not exsit 总是比not in效率高。
 
  5、查询字段为空的条件时,注意查询 is not null 和 != '' 的结合使用,前者是查询数据库值不为数据库NULL 的mysql 优化,后者是查询内容不为空的;特别是列表查询反选查询不为空的条件时,这两个都要加上。
 
  6、多用函数。MySQL的函数方法非常多,包括运算函数、操作函数等,日常的业务使用中,字符拼接、数量计算、字符截取、日期时间格式化、case when 、if 和 ifNull等等,都能在数据操作这一层面解决,可以减少页面标签或其他应用端的再度转换。
 
  7、用order by field 自定义排序。将查询后的结果(注意是:结果,例如 as 之后的别名),按照自定义的排序。简例:SELECT CANCAT(my_level,'级')as level FROM my_info WHEREsex = 1ORDER BY FIELD(level,'0级','1级','2级','3级','4级','5级') ASC。
 
  二、结构优化
 
  1、选择合适的引擎。几个常用的MySQL数据引擎要知道,例如最常用的InnoDB 和 MyISAM。如果写或改数据都是日常操作,则选用InnoDB,因为Inn DB有事务操作,总体来说性能比较综合;但如果在读写分离的多数据库情况下,读的数据库最好采用My ISAM,因为MyISAM 没有事务的概念,在搜索和检索方面却是强化了的。
 
  2、利用索引。索引是双刃剑,用得好能大幅度提高效率,用得不好会阻塞数据库;一般来说,读取或查询较多、字符串字段、非NULL的字段的有利于索引的应用。
 
  3、用上存储过程和触发器。存储过程、触发器能在数据的增查改上很好的改善数据联动,并非数据的改动上都需要动用到代码层。例如某一字段的变动,会单纯触发其他表格的字段变动,则可以用上触发器,可以不使用代码定时器来处理。例如对某一类似的列表进行查询,会返回不同的结果字段但整体结构相似,可以使用存储过程。
 
  三、Tips
 
  1、在对SQL语句有疑惑或者功能语句存在多种解决方案的情况下,可以使用DESC 关键字对SQL 语句进行分析,查看SQL的语句性能、是否利用到索引等分析,从而进一步了解如何优化SQL。
 
 
  2、在Java中,可以对几个通用的字段进行提炼,例如创建时间、主键、更新时间等,作为BaseEntity,然后所有需要到这些字段的都继承该实体
 
  TO BE CONTINUE ...
 

(编辑:开发网_运城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!