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 ... (编辑:开发网_运城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐



浙公网安备 33038102330464号