SQL优化场景方式(上)

简介: SQL优化场景方式(上)

3 SQL优化****

原因:性能低、执行时间太长、等待时间太长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲、线程数)

3.1 SQL :****

编写过程:

select dinstinct  ..from  ..join ..on ..where ..group by ...having ..order by ..limit ..

 

解析过程:

from .. on.. join ..where ..group by ....having ...select dinstinct ..order by limit ...

 

3.2 SQL优化, 主要就是 在优化索引****

索引: 相当于书的目录

索引: index是帮助MYSQL高效获取数据的数据结构。索引是数据结构(树:B树(默认)、Hash树...)

索引的弊端:

1.索引本身很大, 可以存放在内存/硬盘(通常为 硬盘)

2.索引不是所有情况均适用: a.少量数据  b.频繁更新的字段   c.很少使用的字段

3.索引会降低增删改的效率(增删改  查)

优势:****

1.提高查询效率(降低IO使用率)

   2.降低CPU使用率 (...order by age desc,因为 B树索引 本身就是一个 好排序的结构,因此在排序时  可以直接使用)

 

博客:

www.cnblogs.com/annsshadow/…****

4 索引****

B树(Btree)和B+树索引****

4.1 分类****

主键索引:  不能重复。id    不能是null

唯一索引  :不能重复。id    可以是null

单值索引  : 单列, age ;一个表可以多个单值索引,name。

复合索引  :多个列构成的索引 (相当于 二级目录 :  z: zhao)  (name,age)   (a,b,c,d,...,n)

4.2 创建索引****

方式一:

create 索引类型  索引名  on 表(字段)

单值:

create index   dept_index on  tb(dept);

唯一:

create unique index  name_index on tb(name) ;

复合索引

create index dept_name_index on tb(dept,name);

 

方式二:

alter table 表名 索引类型  索引名(字段)

单值:

alter table tb add index dept_index(dept) ;

唯一:

alter table tb add unique index name_index(name);

复合索引

alter table tb add index dept_name_index(dept,name);

 

注意:如果一个字段是primary key,则改字段默认就是 主键索引****

4.3 删除索引:****

drop index 索引名 on 表名 ;

drop index name_index on tb ;

 

4.4 查询索引:****

show index from 表名 ;

show index from 表名 \G


5 SQL性能问题****

1 分析SQL的执行计划  : explain   ,可以模拟SQL优化器执行SQL语句从而让开发人员 知道自己编写的SQL状况

2 MySQL查询优化其会干扰我们的优化

优化方法,官网:dev.mysql.com/doc/refman/…

查询执行计划:  explain +SQL语句

explain  select  * from tb ;

 

id : 编号

select_type :查询类型

table :表

type   :类型

possible_keys :预测用到的索引

key  :实际使用的索引

key_len :实际使用索引的长度    

ref  :表之间的引用

rows :通过索引查询到的数据量

Extra     :额外的信息

 

准备数据:

create table course
(
cid int(3),
cname varchar(20),
tid int(3)
);
create table teacher
(
tid int(3),
tname varchar(20),
tcid int(3)
);
create table teacherCard
(
tcid int(3),
tcdesc varchar(200)
);
insert into course values(1,'java',1);
insert into course values(2,'html',1);
insert into course values(3,'sql',2);
insert into course values(4,'web',3);
insert into teacher values(1,'tz',1);
insert into teacher values(2,'tw',2);
insert into teacher values(3,'tl',3);
insert into teacherCard values(1,'tzdesc') ;
insert into teacherCard values(2,'twdesc') ;
insert into teacherCard values(3,'tldesc') ;
查询课程编号为2  或 教师证编号为3  的老师信息
explain +sql:
相关文章
|
5天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
15天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
2月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
95 11
|
25天前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
|
3月前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
3月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
3月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
5月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
7月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
176 13
|
7月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
106 9