记录从给一个查询需求整理自己的思路.

当新手菜鸟遇到一个新的需求时, 往往 理不清楚 业务的思路. 导致sql写不出来.

当今互联网的需求增多, 程序很多放到 语言层面去处理了, 只要做单表查询就可以满足需求, 造成

很多人写sql依然还是老大难.

记录我整理遗留业务造成线上功能加载1分钟才能展示问题:

业务比较复杂, 当初设计的人也都走光了. 一个简单的业务, 居然需要表关联十多张表才能得到一个想要的sql结果集.

而sql线上执行都在40秒到1分钟左右.

很是痛苦. 看到一个订单表中, 拿一个订单生成时间, 还需要到一个日志表中关联获取, 都要骂娘了, 且日志存到了mysql里...

这个也是无语的.

我也是新手. 这两年多的业务做的基本也是以 语言层面为主. sql多是些 简单的查询.  导致一直没有 深入.

遇到这个业务后. 就更加体会到 sql的重要性.

拿到业务, 了解业务需求之后, 通过对数据库表, 是最快可以全面掌握解决方案的.

反问法:  (针对查询业务)

1. 要什么数据?

2. 要谁的数据?

3. 要哪个时间段的数据?

一般要什么数据, 那他就是作为主线了, 以它的维度, 去考虑.

多表关联时, 一定要注意 笛卡尔积的问题.  wait?  啥是笛卡尔积? 我忘了.

笛卡尔积: 当你的主表与其他表做关联时,.主表可能 就会查询出很多数据.

当在去与关联表去 inner或者left  join时, 会拿着主表查询出的数据 依次去与关联表匹配.

假设:  主表查询出 2w条数据, 关联表给的条件又能查出5000条,

结果在关联时, 会拿着2w条依次去和5k条匹配. 也就是 2w *乘以 5k的效果.

再说点好理解的, 我给你2万把钥匙, 你要试出哪些 能开这5k把锁. 这能快吗...

怎样可以提高查询效率呢.

可以单次只拿少量的钥匙, 去匹配. 这是我这次的解决方案.

先写个简单的sql, mysql的话, 使用limit 0,10, 每次只取10条,

用这个简单sql作为一个临时表, 在和关联表匹配. 效率就高了

还有, 就是  内连接和 左连接  inner和 left的使用掌握不好, 不知道何时用哪个.

思路:  这个思路不绝对.

还是基于第一个简单的sql, 查询出的结果如果都对的话, 关联其他表, 基本都是取一些 相关联的字段了

如果表关联, 数量保持单表查询时的数量, 一般情况可以假设是 关联的关键字用对了,

如果单表查询与关联后数量不一致了, 可以做个分组, 还不一致, 就可以考虑, 换个 关联关键字了.

如果使用inner后, 数量少了, 说明关联后, 没有匹配到数据,   造成把两个表中的数据都舍弃了

就要换成left了, 起码保留主表数据.

除非. 要求两个表的数据要么都要, 要么都没有这种, 就使用inner join

暂时总结这么多, 留着自己复习理解吧

sql 查询-从浆糊到清晰的过程相关推荐

  1. mysql查询各科成绩前三名的记录,sql查询各科成绩前三名----详述过程,思路清晰不烧脑...

    使用mysql.hive查询各科成绩前三名 一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), scor ...

  2. sql查询各科成绩前三名----详述过程,思路清晰不烧脑!

    一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), score int ); 插入数据: insert ...

  3. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程

    一.sql查询执行过程概括 下面给出的mysql基本架构示意图,从中你可以清楚的mysql的各个模块和执行过程. 大体来说可以分为两部分Server层和储存引擎层.Server层包括连接器.查询缓存. ...

  4. 一条SQL查询语句的执行过程,一张图说清SQL查询语句执行过程

    一张图说明 一条SQL查询语句的执行过程 一条sql语句从发送到数据库到它执行完成并返回结果,主要经历以下几个过程: 连接器->查询缓存(如果开启了查询缓存,则会经过这一步,但是大多数情况下都是 ...

  5. 你的sql查询为什么这么慢?

    做后台开发的程序猿通常需要写各种各样的sql,可很多时候写出来的sql虽然能满足功能性需求,性能上却不尽人意.如果业务复杂,表结构和索引设计又不合理的话,写出来的sql执行时间可能会达到几十甚至上百秒 ...

  6. SQL查询入门(下篇)

    引言 在前两篇文章中,对于单表查询和多表查询的概念做出了详细的介绍,在本篇文章中会主要介绍聚合函数的使用和数据的分组. 简介 简单的说,聚合函数是按照一定的规则将多行(Row)数据汇总成一行的函数.对 ...

  7. 流量洪峰成为常态,腾讯数据库如何高性能支撑海量SQL查询?

    今天分享的主题是TDSQL-SQL引擎架构的演进和查询优化实战.今天分享分为四章,分别是:TDSQL简介.SQL引擎简介.SQL引擎查询处理和最佳实践. 点击图片收看直播回放及下载讲师PPT 1. T ...

  8. 复杂 SQL 查询跑不动?DRDS 只读实例来解决!

    摘要: 在实际业务生产环境中,业务应用系统在使用 OLTP 数据库将数据进行存储后,均会存在如后台运营类系统进行统计报表分析等场景的复杂 SQL 查询诉求. 背景 在实际业务生产环境中,业务应用系统在 ...

  9. sql查询分析器 只读_DRDS 只读实例来解决复杂 SQL 查询

    转自: 复杂 SQL 查询跑不动?DRDS 只读实例来解决!​segmentfault.com 背景 在实际业务生产环境中,业务应用系统在使用 OLTP 数据库将数据进行存储后,均会存在如后台运营类系 ...

  10. MySQL番外篇:一条SQL查询语句是如何执行的?

    在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...

最新文章

  1. 【南科大发言】人类赋予人工智能伦理,生物进化方向的突破是关键
  2. HDLBits 系列(0)专题目录
  3. 那些上学的时候没很好理解的数学概念(原)
  4. Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载)
  5. 自动从mysql下载文件到powerbi_关于在Power Query和Power BI中从网页下载文件的小提示...
  6. Linux之部署虚拟环境、安装系统
  7. spring pom设置_Spring社交Twitter设置
  8. 灵魂拷问:到底要不要写单元测试,如何正确进行单元测试?
  9. 阿里云ECS服务器自定义端口无法访问问题记录
  10. HDU1996 汉诺塔VI【水题】
  11. 如何在Mac上删除其他存储
  12. FFT【快速傅里叶变换】FWT【快速沃尔什变换】
  13. 冯氏集团于进博会发布报告,分析影响全球服装采购格局的五大因素
  14. 【Transformers】第 1 章:从Bag-of-Words到Transformer
  15. 2种方式打开jar文件
  16. 速率法和终点法的区别_两点法终点法速率法.doc
  17. Chrome更新89版本后,sessionStorage丢失a标签跳转丢失sessionStorage
  18. 写一个函数,输出四次“hello world“,每次间隔3秒
  19. Ipad电容笔买原装还是平替?高性价比的ipad平替电容笔推荐
  20. 汽车机油的作用及分类、标号和级别的知识

热门文章

  1. apk 泊车摄像头_【精】申精,两厢黑色嘉年华安装导航摄像头倒车影像作业,俺系小黑...
  2. u盘文件夹变成应用程序怎么恢复?方法来了!
  3. 人脸对齐实现“平均脸”制作
  4. LeetCode:在线编程刷题网站
  5. 认知-洞察力:洞察力
  6. 第五届蓝桥杯java试题答案_2014年第五届蓝桥杯省赛试题(JavaA组)
  7. html 页面定位到指定位置的4种实现方式
  8. idea使用帮助文档1
  9. poj1008(Maya Calendar)玛雅历(c++实现)
  10. win7浏览器IE9升级到IE10后无法启动的问题