ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql性能优化

2022-07-03 01:02:37  阅读:121  来源: 互联网

标签:性能 查询 索引 SELECT sql 优化 id select


1.通过explain可以知道mysql是如何处理语句的,并分析出查询或是表结构的性能瓶颈,其实就是在干查询优化器的事,通过expalin可以得到:

a. 表的读取顺序

b.表的读取操作的操作类型

c.哪些索引可以使用

d. 哪些索引被实际使用

e.表之间的引用

f.每张表有多少行被优化器查询

 

索引type从优到差:

System→const→eq_ref→refref_or_null→index_merge→unique_subquery→index_subquery→range→indexall.

 

Select_type: 一共有9中类型,只介绍常用的4种:

SIMPLE: 简单的 select 查询,不使用 union 及子查询

PRIMARY: 最外层的 select 查询

UNION: UNION 中的第二个或随后的 select 查询,不 依赖于外部查询的结果集

DERIVED: 用于 from 子句里有子查询的情况。MySQL 会 递归执行这些子查询, 把结果放在临时表里。

 

 

小表驱动大表,即小的数据集驱动大的数据集:

当B表的数据集比A表小时,用in优化 exist两表执行顺序是先查B表再查A表查询语句:SELECT * FROM tb_dept WHERE id in (SELECT id FROM tb_dept) ;

当A表的数据集比B表小时,用exist优化in ,两表执行顺序是先查A表,再查B表,查询语句:SELECT * FROM A WHERE EXISTS (SELECT id FROM B WHERE A.id = B.ID) ;

尽量使用连接代替子查询,因为使用 join 时,MySQL 不会在内存中创建临时表。

尽量避免在 where 子句中使用 != 或者 <> 操作符,查询引用会放弃索引而进行全表扫描.

避免在索引列上使用 is null 和 is not null。

 

with as 定义

with A as (select * from class)

也就是将重复用到的大批量 的SQL语句,放到with as 中,加一个别名,在后面用到的时候就可以直接用。对于大批量的SQL数据,起到优化的作用。

标签:性能,查询,索引,SELECT,sql,优化,id,select
来源: https://www.cnblogs.com/ningjing213/p/15743135.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有