优化SQl查询
目标
1. 减少IO次数
数据库操作中90%的数据消耗都在IO,所以减少IO次数是最先考虑的。
2. 降低CPU计算
order by,group by,distinct,对CPU消耗都比较大
误区
1. count(1), count(primary_key)比count(*)好
对于有些场景,这样做可能性能会更差,应为数据库对 count(*) 计数操作做了一些特别的优化。???
一般我还是会用count(1)或count(primary_key)
2. count(column)和countd(*)是一样的
count(column) 是表示结果集中有多少个column字段不为空的记录
count(*) 是表示整个结果集有多少条记录
3. select a,b from … 比 select a,b,c from … 可以让数据库访问更少的数据量
其实数据量是一样的。数据库的存储原理
有索引的话就不一样,怎么不一样??
4. order by 一定需要排序操作
索引本来就是排序的,加索引后,一般会省略排序操作
延伸阅读:MySQL ORDER BY 的实现分析,MySQL 中 GROUP BY 基本实现原理以及 MySQL DISTINCT 的基本实现原理这3篇文章中有更为深入的分析,尤其是第一篇
基本原则
1. 少用join
MySQL优化器效率高,多表join,一方面优化器受限,另一方面MySQL的join没Oracle好
2. 尽量减少排序
因为排序要占很多CPU资源,减少排序的方法
1. 用索引代替排序
2. 减少参与排序的数据条数
3.可以不排序,就不要对数据做排序
3. 尽量少使用 select *
一方面,如果用到order by,更少的数据会提升排序效果;另一方面,如果查询的字段刚好是索引的字段,会大大提升速度
4. 尽量用 join 代替子查询
尽join性能上不太好,还是要比子查询要好
5. 尽量少用 or
MySQL在where 后用or,性能还不如 union all、union,所以建议在必要的时候用 union all 或 union
6. 用 union all 代替 union
因为 union 合并后,会进行唯一性过滤,这涉及到排序,所以会大大占用CPU运算,如果确定数据不会重复或不在乎数据重复的情况下,尽量使用 union all
7. 尽早过滤
在用 join 的时候,可以在 join 子句中做一些简单的过滤,而不用在最后where的时候再以前过滤。
8. 首先优化高并发的SQL,而不是使用频率小的
因为高并发更容易出问题,速度慢一点点都可能压垮系统,而使用频率小的,即使慢一点,系统还是能顶住
9. 统一SQL语句写法
select * from user
SELECT * FROM user
对于我们来说,只是大小写的问题,但对于数据库解析器是要解析两次的,如果统一的话效率会更高。
10. 不要用太复杂的SQL
一般SQL语句不要超过三层嵌套,太多就看不懂,而且数据库解析会更慢,这样维护成本和解析成本都很高。
11. 少用数据库函数
数据库函数有事会根据不同数据库而不同,建议程序做好过使用数据库自带的函数,一是好维护,二是数据库迁移更容易。
12. 可能会导致索引无效的情况,对索引字段进行如下操作
1) like ‘%AA%’
2) 索引字段进行计算操作
3) not,<>,!=
4) is null,is not null
5) 类型转换
6) 索引字段进行函数
13. 从全局出发优化,而不是片面调整
SQL 优化不能是单独针对某一个进行,而应充分考虑系统中所有的 SQL,尤其是在通过调整索引优化 SQL 的执行计划的时候,千万不能顾此失彼,因小失大。
14. 尽可能对每一条运行在数据库中的SQL进行 explain
优化 SQL,需要做到心中有数,知道 SQL 的执行计划才能判断是否有优化余地,才能判断是否存在执行计划问题。在对数据库中运行的 SQL 进行了一段时间的优化之后,很明显的问题 SQL 可能已经很少了,大多都需要去发掘,这时候就需要进行大量的 explain 操作收集执行计划,并判断是否需要进行优化。
15. 临时表
参考:http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765465.html
相关推荐
### 优化 SQL 查询速度 在数据库管理与应用中,提高 SQL 查询的速度是非常重要的一个环节,它不仅能够提升系统的响应速度,还能有效降低服务器资源的消耗。以下是从标题、描述及部分给定内容中提炼出的关键知识点,...
优化SQL查询策略.pdf
针对以上问题,可以采取以下策略来优化SQL查询: 1. 将数据、日志和索引存储在不同的I/O设备上,提高读取速度。Tempdb应放在RAID0上,以提升临时数据的处理速度。数据量越大,优化I/O越关键。 2. 表的垂直和水平分割...
在IT行业的数据库领域,SQL查询优化是至关重要的技术点,特别是在大数据量处理和高并发场景下,优化SQL查询可以显著提升系统的性能和响应速度。本文将深入探讨SQL查询优化的关键知识点,包括常见的优化策略、查询...
随着数据量的不断增加,SQL查询的执行效率对于数据库整体性能的影响越来越大。本文从减少剖析Oracle SQL表达式的时间和优化SQL语句执行过程两个角度出发,探讨了提高Oracle数据库性能的多种方法。 首先,关于减少...
SQL优化是数据库管理中的关键环节,它涉及到提升查询性能、减少资源消耗以及改善系统整体效率。SQL优化软件和工具能够帮助数据库管理员(DBA)和开发人员找出性能瓶颈,优化查询逻辑,从而提高数据库系统的响应速度...
为了更好地理解和优化SQL查询,我们需要深入掌握其内部工作原理。 #### SQL执行计划简介 当数据库接收到一个SQL查询时,它会解析该查询并生成一个执行计划。执行计划是指数据库系统为执行SQL查询而选择的一系列...
#### 三、优化SQL查询效率的策略 ##### 3.1 减少I/O设备访问 I/O设备访问效率是影响查询性能的关键环节,应采取以下策略提高其效率: - **数据分布优化**:将数据、日志、索引分布在不同的I/O设备上,可以显著...
SQL 查询优化是数据库优化的重要部分,查询优化器是 SQL SERVER 中的一个组件,可以自动优化查询语句,提高查询效率。本文将详细介绍查询优化器的工作原理、SARG 的定义和应用、查询优化的 tips 等。 一、查询优化...
在SQL世界中,优化是提升数据库性能的关键环节,特别是对于MySQL这样的关系型数据库管理系统,有效优化SQL查询可以显著提高系统响应速度,降低资源消耗。本书籍集合了丰富的SQL优化知识,旨在帮助读者深入理解并掌握...
SQL查询分离器是一种工具,主要用于帮助开发者和数据库管理员解析、理解和优化SQL查询语句。它在数据库管理和开发过程中起着至关重要的作用,因为高效的SQL查询是维持系统性能的关键。SQL查询分离器休闲庄版,正如其...
SQL查询优化是数据库管理的...优化SQL查询不仅可以提升查询速度,还能减少数据库服务器的负载,提高整体系统性能。在设计和编写SQL查询时,应始终考虑索引的使用、查询结构的优化以及避免全表扫描,以实现最佳性能。
随着数据库技术的进步和数据量的增长,如何优化SQL查询语句成为了提升系统性能的关键所在。Microsoft SQL Server作为一种广泛使用的数据库管理系统,内置了查询优化器来自动优化SQL查询操作。虽然SQL Server的查询...
SQL查询优化是数据库管理系统中至关重要的一环,它旨在提高数据检索速度,降低系统资源消耗,提升整体应用性能。SQL查询优化主要包括以下几个方面: 1. 合理使用常量优化查询: 在编写SQL语句时,应尽量避免将字段...
SQL查询分析器是一种重要的数据库管理工具,主要...总之,SQL查询分析器是数据库管理和开发不可或缺的工具,它通过深入解析和优化SQL查询,提高了数据处理的效率,减少了系统资源的消耗,从而提升了整体的数据库性能。
优化SQL查询是确保数据库系统高效运行的关键。本文将详细介绍SQL查询优化的策略和技巧,并通过实例代码展示如何提升查询性能。 SQL查询优化是一个持续的过程,需要对数据库系统有深入的了解和细致的调整。通过本文的...
它能够解析和优化SQL查询,找出潜在的性能瓶颈,这对于大数据量的数据库管理和性能调优至关重要。 3. 远程数据库连接:SQL查询分析器的远程专用特性意味着它可以连接到不在本地运行的数据库服务器。这通常需要设置...
### SQL查询慢原因分析 #### 一、索引缺失或未...总之,优化SQL查询涉及多方面的考量,包括数据库设计、硬件配置、网络环境、查询语句编写等多个层面。通过综合运用上述策略,可以显著提升SQL查询的效率和响应速度。
SQL查询语句是数据库操作的核心,优化SQL查询语句对于提升数据库性能至关重要。本文主要探讨了Oracle数据库中SQL查询语句的优化策略及其重要性。 首先,SQL查询语句的优化主要目标是将低效的查询转换为高效查询,以...
在Oracle数据库管理中,监控和优化SQL查询是确保系统性能稳定的关键环节之一。对于那些消耗大量资源的SQL语句进行记录和分析可以帮助DBA快速定位问题并采取相应的优化措施。本文将详细介绍如何通过特定的SQL查询来找...