SQL:优化问题&并发问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
45 13
|
19天前
|
SQL 安全 数据库
如何优化SQL查询
【8月更文挑战第1天】如何优化SQL查询
26 2
|
19天前
|
SQL 缓存 关系型数据库
SQL如何优化查询?
【8月更文挑战第1天】SQL如何优化查询?
29 1
|
26天前
|
SQL
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
|
23天前
|
SQL 数据采集 数据管理
SQL数据:探索、管理与优化的全面解析
在信息化时代,数据成为企业核心资产。本文探讨SQL在数据探索、管理与优化中的作用:使用DESC、SELECT了解数据集;评估数据质量;发现数据特征。管理方面,涵盖数据存储、检索、更新与维护。优化则涉及索引、查询及数据库设计,确保高性能和效率。掌握SQL能有效挖掘数据价值,支持企业决策与创新。
27 1
|
2天前
|
SQL 数据库 数据库管理
SQL查询是否都需要解析:深入解析SQL执行流程与优化技巧
在数据库管理系统中,SQL(Structured Query Language)查询是用户与数据库交互的主要方式
|
25天前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之SQL查询该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
26天前
|
SQL 缓存 关系型数据库
面试题MySQL问题之实现覆盖索引如何解决
面试题MySQL问题之实现覆盖索引如何解决
30 1
|
27天前
|
SQL 分布式计算 MaxCompute
ODPS SQL问题之为什么使用odps.sql.groupby.skewindata = true优化后,逻辑执行计划会发生改变如何解决
ODPS SQL问题之为什么使用odps.sql.groupby.skewindata = true优化后,逻辑执行计划会发生改变如何解决
|
27天前
|
SQL 存储 数据库
sql函数优化
【7月更文挑战第24天】sql函数优化
14 0