SQL:优化问题&并发问题

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
13天前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
13天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
13天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
20天前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
34 3
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
98 10
|
1月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
20天前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
42 0
|
2月前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
2月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响

热门文章

最新文章