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语句 , 如:增加索引、调整索引顺序、避免使用某些函数等等 。
关于执行计划 , 后续章节将会单独详细讲解 。
遵守原则在平时写SQL时 , 养成好的习惯 , 多加留意 , 很大程度上就会避免一些SQL性能问题 。汇总如下: