sql优化包含哪些 如何优化sql语句


sql优化包含哪些 如何优化sql语句

文章插图
SQL命令因为语法简单、操作高效受到了很多用户的欢迎 。但我们经常碰到质量不高、或者性能极差的SQL语句,这时,大多数人的想法是:重构这个SQL语句,让其查询的结果集和原来保持一样,并且希望SQL性能得以提升 。
其实,在重构SQL时,我们可以运用一些小技巧,让我们的优化工作更简单 。
分解SQL面对一个复杂SQL,我们可以将它分解成多个简单SQL,即使变简单了,但是也能够得到相同的处理结果 。
复杂的SQL通常会出现在一些老的产品、项目中,因为从前的开发者认为,多次交互,在网络带宽、程序与数据库间网络通信等方面是一件代价很高的事情 。然而现在的技术发展已经能够解决这个不足,因为运行多个SQL已经不是问题 。
复杂SQL的分解,在面对超级复杂SQL语句时,性能提升尤为明显 。所以,在面对超级复杂SQL语句,并且存在性能问题时,推荐分解为小查询来进行优化 。
不过,在应用设计的时候,如果一个查询能够胜任并且不会产生性能问题,这时完全可以用一个稍微复杂的SQL来完成的,倘若再死板的强制拆分成多个小查询是不明智的 。
在当今很多高性能的应用系统中,都是极力推荐使用单表操作,然后将单表查询结果在应用程序中进行关联,以满足复杂业务的查询需求 。**一个SQL可以搞定事情,为何要分开来写,而且还得在应用程序中多次执行SQL查询,再进行结果集的关联,这到底为什么要这么做呢?
乍一看,这样做复杂不说而且没有什么好处,原本一条查询,这样却变成了多条查询 。事实上,这样分解有如下的优势:
  • 让缓存更高效 。在应用程序中,可以很方便地百思特网缓存单表查询结果对应的结果对象,便于后续任何时候可以直接从结果对象中获取数据 。
  • 分解查询后,执行单个查询可以减少表锁的竞争 。
  • 在程百思特网序应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展 。
  • 单表查询效率高于多表复杂查询 。
  • 减少冗余记录百思特网的查询 。在程序应用层关联,意味着对于某条记录应用只需要查询一次,而在数据库中做关联查询,则可能需要重复地访问一部分数据记录 。从这点来看,这样的重构还可能减少网络和内存的消耗 。
查询切分有时候对于一个大查询,即:结果集很大的查询,我们需要采用“分而治之”的思想,将大查询切分为小查询,每个查询功能完全一样,只是完成一小部分,每次只返回一小部分查询结果 。通俗来讲,就是对where条件的过滤范围进行切分,每次只查询其中一部分数据,即:类似于分页查询 。
这样做,不管对于SQL查询本身,还是对于上层业务来说,都是很小的开销 。最典型的的案例就是分页查询,目前各类框架都有了很好的支持,如:MyBatis等,只需在实际使用时稍加留意就可避免 。
执行计划使用执行计划EXPLAIN关键字,可以使我们知道MySQL是如何执行SQL语句的,这样可以帮助我们分析我们的查询语句或是表结构的性能瓶颈 。EXPLAIN的查询结果还会告诉我们索引主键是如何被利用的,数据表是如何被搜索或排序的….等等 。
语法格式是:
EXPLAIN SELECT语句;
通过执行计划结果,将会指导我们进一步来重构SQL语句,如:增加索引、调整索引顺序、避免使用某些函数等等 。
关于执行计划,后续章节将会单独详细讲解 。
遵守原则


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: