SQL:优化问题&并发问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SQL:优化问题&并发问题

@[toc]

二 SQL优化

1)SQL优化之分页优化

普通写法

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 where sellerid = 100 limit 100000,5000) t2
where  t1.id = t2.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

2)SQL优化之子查询优化

典型子查询

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;

SQL优化最佳实践

  1. 分页优化

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

  1. 子查询优化

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

  1. 查询需要的字段

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

三 锁

1)索之表级锁

Innodb 与 Myisam

引擎 支持事务 并发 索引损坏 锁级别 在线备份
Myisam 不支持 查询堵塞更新 索引损坏 不支持
Innodb 支持 不堵塞 不损坏 支持

目前比较推荐Innodb,较高版本也将其设置 为默认引擎

典型案例

创建表,引擎为Myisam

create table 't_myisam'(
'id' int(11) default null
)engine=myisam default charset=utf8;

查询堵塞更新

select id,sleep(100) from t_myisam
 
Query 6 User sleep select id ,sleep(50) from t
Query 4 Waiting for table metadata lock alter table t add column gmt_create data
Query 1 Waiting for table metadata lock select*from twhere id=2
Query 1 Waiting for table metadata lock update t setid_2where.id=1

解决:更改引擎

alter table t_myisam engine = innodb;

2)锁之Metadata lock

DDL操作

alter table t add column gmt_create datetime

数据库连接状态

select id , sleep(50) from t 
-- 在操作下面DDL语句之前,先执行查询状态的语句
alter table t add column gmt_create datetime

可以看到出现:Waiting for table metadata lock,导致后面所有操作都出现堵塞,因为DDL语句会破坏元数据结构,导致拿不到锁。
Tips:DDL过程中注意数据库中大长事务,大查询

锁问题最佳实践

  1. 设计开发阶段

    1. 避免使用myisam存储引擎,改用Innodb引擎
    2. 避免大事务,长事务导致事务在数据库中的运行时间加长
    3. 选择升级到MySQL5.6版本,支持online ddl
  2. 管理运维阶段

    1. 在业务低峰期执行上述操作,比如创建索引,添加字段;
    2. 在结构变更前,观察数据库中是否存在长SQL,大事务;
    3. 结构变更期间,监控数据库的线程状态是否存在lock wait;
    4. 阿里云ApsaraDB支持在DDL变更中加入 wait timeout;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
1月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
180 6
|
9月前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
6月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
8月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
9月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
426 9
|
10月前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
11月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
277 11
|
10月前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
1338 0
|
12月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
12月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化