sql的优化技巧。

1.用join进行子查询的优化。

低效的子查询
select a.user_name,a.over,(select over from user2 b where a.user_name=b.user_name) as over2 from user1 a;
使用join优化后的子查询:
select a.user_name,a.over,b.over as over2 from user1 a left join user2 b on a.user_name=b.user_name;

  2.用join进行聚合函数的优化。

使用join + having优化聚合子查询:
select a.user_name,b.timestr,b.kills from user1 a
join user_kills b on a.id = b.user_id
join user_kills c on c.user_id = b.user_id
group by a.user_name,btimestr,b.kills
having b.kills = max(c.kills);

  3.分类聚合函数的优化

分类聚合方式查询每一个用户某一个字段数据最大的两条数据:
select d.user_name ,c.ctimestr,kills from
(select user_id ,timestr ,kills ,(
select count(*) from user_kills b where b.user_id = a.user_id and a.kills <= b.kills) as cnt
from user_kills a group by user_id,timestr,kills) c
join user1 d on c.user_id = d.id where cnt <= 2

4.自连接行转列

select * from (
select sum(kills) as '孙悟空' from user1 a
join user_kills b
on a.id = b.use_id and a.user_name='孙悟空'
) a cross join (
select sum(kills) as '猪八戒' from user1 a
join user_kills b
on a.id = b.use_id and a.user_name='猪八戒'
) b cross join(
select sum(kills) as '沙僧' from user1 a
join user_kills b
on a.id = b.use_id and a.user_name='沙僧'
) c

   5.case语句列转行

select
sum(case when user_name=' 孙悟空' then kills end) as '孙悟空',
sum(case when user_name='猪八戒' then kills end) as '猪八戒',
sum(case when user_name='沙僧' then kills end) as '沙僧'
from user1 a join use_kills b
on a.id = b.user_id;

6.使用序列化方法转换:

select user_name,
replace(substring(substring_index(mobile,','a.id),char_length(substring_index(mobile,',',a.id-1))+1),',','') as mobile --截取字符串
from tb_sequence as a
cross join(
select user_name,
concat(mobile,',') as mobile, --在mobile结尾增加逗号
length(mobile)-length(replace(mobile,',',''))+1 as size --通过mobile总长度-排除逗号后的长度+1计算得出总段数
from user1 as b
) as b on a.id<=b.size

7.使用union all 将结果集 合并

SELECT user_name,'arms' as equipment, arms FROM
user1 a JOIN user1_equipment b ON a.id=b.user_id
UNION ALL
SELECT user_name,'clothing' AS equipment,clothing FROM user1 a JOIN user1_equipment b ON a.id=b.user_id
UNION ALL
SELECT user_name,'shoe' AS equipment,shoe FROM user1 a JOIN user1_equipment b ON a.id=b.user_id

  

sql语句优化小结的更多相关文章

  1. 数据库SQL语句优化小结

    网上查找的总结: 1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null ...

  2. sql语句优化原理

    前言 网上有很多关于sql语句优化的文章,我这里想说下为什么这样...写sql语句,能够提高查询的效率. 1 sql语句优化原理 要想写出好的sql,就要学会用数据库的方式来思考如何执行sql,那么什 ...

  3. 优化数据库的方法及SQL语句优化的原则

    优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...

  4. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

  5. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  6. 数据库的优化(表优化和sql语句优化)

    在这里主要是分为表设计优化和sql语句优化两方面来实现. 首先的是表设计优化: 1.数据行的长度不要超过8020字节.如果是超过这个长度的话这条数据会占用两行,减低查询的效率. 2.能用数字类型就不要 ...

  7. MySQL常用SQL语句优化

    推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...

  8. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  9. sql语句优化总结

    sql语句优化总结 数据库优化的几个原则: 1.尽量避免在列上做运算,这样会导致索引失败: 2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query.不然join的越 ...

随机推荐

  1. Border Theory

    持续更新中!!!更个屁,无线停更! 前言: KMP 学傻了,看 skyh 说啥 border 树,跑来学 border 理论 洛谷云剪切板:https://www.luogu.com.cn/paste ...

  2. Java---注解与反射

    前言 近期在学习SSM框架的过程中发现在SSM框架中大量用到了反射与注解的知识,要想学好SSM框架,必须将注解与反射熟记于心,尤其是对Java反射机制的理解. 对于我这种记性不好的人来说"基 ...

  3. Java学习 (七)基础篇 变量

    变量 变量顾名思义,就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单位,其要素包括变量名.变量类型和作用域 type varName [=val ...

  4. React Native环境配置、初始化项目、打包安装到手机,以及开发小知识

    1.前言 环境:Win10 + Android 已经在Windows电脑上安装好 Node(v14+).Git.Yarn. JDK(v11) javac -version javac 11.0.15. ...

  5. 万答#18,MySQL8.0 如何快速回收膨胀的UNDO表空间

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 背 ...

  6. GreatSQL特性介绍及未来展望--叶金荣|万里数据库

    「3306π」是由业内知名MySQL专家叶金荣.吴炳锡首发倡议成立,围绕MySQL及云数据库.大数据等周边相关技术的技术爱好者的社区.致力于把互联网技术带到传统行业里,推动开源技术在传统行业中应用.本 ...

  7. 【系统设计】S3 对象存储

    在本文中,我们设计了一个类似于 Amazon Simple Storage Service (S3) 的对象存储服务.S3 是 Amazon Web Services (AWS) 提供的一项服务, 它 ...

  8. Linux应急响应学习

    Linux应急响应-系统日志排查-溯源 溯源 找到攻击者.系统日志分析攻击者的ip  攻击者可能留下了一些代码 样本 网上的信息很大程度上是不可信的. 方法: 蜜罐  高交互的蜜罐 溯源: ip 日志 ...

  9. tomcat服务器和servlet的基本认识

    今天下午在知乎看见了一个老哥的文章,写的是servlet写的很好,以前我对Javaweb方面的理解比较混乱今天看了这位老哥的文章后受益匪浅,知乎名叫:bravo1988​ 里面也有讲servlet和s ...

  10. qt unknown type name编译报错记录

    在classA中include class B,然后定义成员变量的时候,报错unknown type name了. 一共有两种可能造成这种问题: 1.circle include,同时在classA中 ...