如何优化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的查询结果还将告诉我们如何应用索引主键,如何搜索或排序数据表,等等 。
语法模式是:
解释选择语句;
通过实现规划结果,将指导我们进一步重构SQL语句,如:增加索引、调整索引顺序、避免应用某些函数等 。
关于实施计划,以下章节将分别详细讲述 。

文章插图
遵照原则平时写SQL的时候,养成良好的习惯,多加注意,很大程度上会避免一些SQL性能问题 。总结如下:
永远为每张表设置一个ID主键 。避免应用SELECT * 。为搜索字段树立索引 。在Join表的时候应用对应类型的列,并将其索引 。尽可能地应用NOT NULL 。越小的列会越快 。当只要一行数据时应用LIMIT 1 。操作符的优化,尽量不采取不利于索引的操作符,目标就是为了避免全表扫描 。1)in 和 not in慎用,尽量用 between取代in,用 not exists 取代 not in 2)is null和is not null慎用 3)!=或
推荐阅读
- 如何优化一个网站(北仑如何优化一个网站)
- 如何以卡办卡(申请信用卡没有单位怎么办)
- 如何代购(代购平台app有哪些)
- 如何代理一个品牌(我想代理一个产品)
- 如何代理ip(代理ip)
- 如何从银行贷款(如何从银行贷款200万)
- 如何从视频中提取音频(视频提取音频的软件)
- 如何从网上下载视频(怎么下载视频教程)
- 如何从深圳去香港(去香港怎么走)
- 如何从政(高官都是怎么升上去的)
