案例2:SQL优化 | 学习笔记

简介: 简介:快速学习案例2:SQL优化

开发者学堂课程【云数据库优化十大典型案例:案例2:SQL优化】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/597/detail/8567


案例2:SQL优化


内容简介

一.分页优化案例

二.子查询优化案例

三.SQL 优化最佳实践


一.分页优化案例

Query|51|Sending data |

select *

from buyer

where sellerId =765922982

and gmt_modified>='1970-01-01 08:00:00'

and gmt_modified<='2013-06-05 17:11:31'

Limit255000,5000;

普通写法:

select * from buyer where sellerid=100 limit 100000,5000

普通 limit M,N的翻页写法,在越往后翻页的过程中速度越慢,原因 mysql 会读取表中的前M+N条数据,M越大,性能就越差。

优化写法:

select t1.* from buyer t1,

(select id from buyer sellerid=100 limit 100000,5000)t2

where t1.id=t2.id;

查出ID,然后和主表做关联。

注意:

需要在t表的 sellerid 字段上创建索引,id为表的主键

create index ind_sellerid on buyer(sellerid);

原始语句:

select id,…

from buyer

where sellerId = 765922982

and gmt_modified > = '1970-01-01 08:00:00'

and gmt_modified < = '2013-06-05 17:11:31'

limit 255000,5000 ; 

优化后语句:

select t2.*

from (select id

from buyer where sellerId = 765922982

and gmt_modified > = '1970-01-01 08:00:00'

and gmt_modified < = '2013-06-05 17:11:31'

limit 255000,5000 ) t1,

buyer t2

where t1.id=t2.id 

查询时间:60S→0.2S


二.子查询优化案例

典型子查询

SELECT first_name

FROM employees

WHERE emp_no IN

(SELECT emp_no FROM salaries_2000 WHERE salary= 5000);

MySQL的处理逻辑是遍历employees表中的每一条记录,代入到子查询中中去

改写子查询

SELECT first_name

FROM employees emp ,

(SELECT emp_no FROM salaries_2000 WHERE salary=5000) sal

WHERE emp.emp_no=sal.emp_no;

执行时间:1200S→0.1S


三.SQL优化最佳实践

1.分页优化

采用高效的 Limit 写法,避免分页查询给数据库带来性能影响

2.子查询优化

子查询在5.1,5.5版本中都存在较大风险,将子查询改为关联使用 Mysql 5.6的版本,可以避免麻烦的子查询改写

3.查询需要的字段

避免用 SELECT* 查询所有字段数据,只查询需要的字段数据

相关文章
|
6月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
14天前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
21天前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
8月前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
5月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
6月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
7月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
8月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
269 9
|
8月前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
9月前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。