网站建设需求方案文档,手机网站网址申请,广东高端网站建设报价,设计网站广告语首先以一张思维导图从全局上给大家分享以下几种SQL优化策略#xff0c;再详细讲解 1、避免使用SELECT * 在阿里的编码规范中也强制了数据库查询不能使用SELECT *#xff0c;因为SELECT *方式走的都是全表扫描#xff0c;导致的结果就是查询效率非常低下#xff0c;其原因为… 首先以一张思维导图从全局上给大家分享以下几种SQL优化策略再详细讲解 1、避免使用SELECT * 在阿里的编码规范中也强制了数据库查询不能使用SELECT *因为SELECT *方式走的都是全表扫描导致的结果就是查询效率非常低下其原因为当我们使用SELECT *方式时SQL会有一个格式化的阶段这个阶段会将所有表字段都取出(将*号解析成表的各个字段)增加了查询解析器的成本 2、小表驱动大表 小表驱动大表指的是使用数据量较小索引比较完备的表然后使用它的索引和条件对大表的数据进行关联和筛选从而减少数据的计算量提升查询效率 例如当下我又两张表分别为学生表(有45条数据)分数表(有1000条数据)它们需要进行关联查询我们可能会用到LEFT JOIN或者RIGHT JOIN 在FROM我们跟的表一般为主表此时如果我们的SQL语句为 “……FROM student LEFT JOIN score……” 就叫做小表驱动大表反之就是大表驱动小表因为它需要将分数表中的1000条数据都查出来之后在去一一关联学生表
3、用连接查询代替子查询 在MySQL进行两张或两张以上的表进行联查时可以使用连接查询和嵌套查询尽可能减少嵌套查询的次数其原因为 ①嵌套查询需要执行两次数据库查询一次是外部查询一次是嵌套子查询而是用连接查询可以减少数据库查询次数从而提升查询效率 ②连接查询可以更好地用上数据库的索引而嵌套查询通常需要扫描整个表因此连接查询可以跟快的执行查询操作 当然以上说法也并不绝对在嵌套查询中我们依旧可以通过合理的使用IN或EXIST关键字来提升查询效率(遵循小表驱动大表原则)。 IN关键字通常应用在嵌套查询的嵌套条件前例如“……FROM xxx WHERE xxx IN(嵌套SQL)” 如果sql语句中包含了IN关键字则它会优先执行IN里面的子查询语句然后再执行IN外面的语句。如果IN里面的数据量很少作为条件查询速度更快。 EXISTS关键字也使用在嵌套查询条件前例如 “……FROM xxx WHERE EXISTS (嵌套SQL语句)” 如果sql语句中包含了exists关键字它优先执行exists左边的语句即主查询语句。然后把它作为条件去跟右边的语句匹配。如果左侧SQL语句查询数据量较少依旧能够提升查询效率。
4、提升GROUP BY的查询效率 如果没有为GROUP BY的字段设置索引则查询可能会变得非常慢(这里面涉及到了一个B树的概念它会为我们有序的排序索引的数据)当为需要分组的字段建立索引后数据就是有序的这些有序的数据会排列在一起
5、使用批量插入 MySQL本身就支持批量插入数据例如 而在代码中通过持久层访问数据库插入数据时我们也不建议一条一条或者通过循环的形式插入因为每次调用循环里的插入方法 相当于都要和数据库进行一次宜采取的方式是将数据封装在一个集合中通过集合一次性插入数据例如 6、当一次查询数据量过多时一定要使用LIMIT进行分页 一个查询返回成干上万的数据行不仅占用了大量的系统资源也会占用更多的网络带宽影响查询效率也有可能造成内存溢出。使用LIMIT可以限制返回的数据行数减轻了系统负担提高了查询效率。使用LIMIT可以达到以下结果 避免过度提取数据对于大型数据库系统从数据库中提取大量的数据可能会导致系统崩溃。使用LIMIT可以限制提取的数据量避免过度提取数据保护系统不受影响。优化分页查询分页查询需要查询所有的数据才能进行分页处理这会浪费大量的系统资源和时间。使用LIMIT优化分页查询可以只章询需要的数据行缩短查询时间减少资源的浪费。简化查询结果有时我们只需要一小部分数据来得出决策而不是整个数据集。使用LIMIT可以使结果集更加精简和易于阅读和理解。限制行数非常有用因为它可以提高查询性能、减少处理需要的时间并且只返回我们关心的列 7、需要合并数据时尽可能使用UNION ALL而非UNION UNION ALL和UNION通常在数据合并中使用例如 “(SELECT * FROM user WHERE id1) UNION (SELECT * FROM user WHERE id2)” SQL语句使用UNION关键字后可以获取去重后的数据而如果使用UNION ALL关键字可以获取所有数据包含重复的数据。在业务允许出现重复数据的情况下我们更推荐使用UNION ALL因为UNION去重需要经过数据的遍历、排序和比较计算无疑是更耗费性能和CPU资源的。 除非是有些特殊的场景比如UNION ALL之后结果集中出现了重复数据而业务场景中是不允许产生重复数据的这时可以使用UNION或者在UNION前利用索引提升查询效率
8、尽可能减少表关联的次数(减少JOIN的使用) 对于这个优化策略我的理解是减少JOIN的次数并非减少必要使用次数JOIN终究在查询效率上还是远高于IN的这个减少的含义应该是减少表的冗余关联字段来减少表的链接(即需要找到多表能够进行关联的最少字段用最少的字段进行关联)。 减少JOIN的使用次数更多的原因还是在SQL语句的编写上很容易造成关联错误。 以上就是关于SQL调优的策略介绍总结来说SQL调优的原则就是减少数据扫描、减少与数据库反复的交互次数、减少内存开销而大部分的优化策略都是在索引的基础上是实现的。
———————————————————————————————————————————
路漫漫其修远兮吾将上下而求索~ 到此关于SQL调优策略的讲解算告一段落了写作不易如果你认为博主写的不错
请点赞、关注、评论给博主一个鼓励吧您的鼓励就是博主前进的动力。