一句玩笑之后的思考

简介: 今天在微信上碰到某大师,简单聊了下。我和这位大师的关系也蛮有趣,最开始通过其他的渠道认识,还没有见过面,我向他推荐了我的一名前同事,没想到这位大洋彼岸的前同事竟然和这位大师也曾经是同事。
今天在微信上碰到某大师,简单聊了下。我和这位大师的关系也蛮有趣,最开始通过其他的渠道认识,还没有见过面,我向他推荐了我的一名前同事,没想到这位大洋彼岸的前同事竟然和这位大师也曾经是同事。真是翻洋过海也逃不出他的圈子啊。为了简单起见我简称大师为A,前同事为B,我为C,所以我就笑称既然这样,按照表的连接关系,A和B是同事,B和C是同事,那A和C也是同事了,听起来还是蛮有道理的吧。大师简单一句哈哈了事。
这个也就自己糊弄糊弄自己,猛意向似乎还确实是蛮有道理的。
如果把表的结构和sql语句结合起来,我还真找不出该怎么把这种关系给描述出来,索性画了个图,一看就不满足情况吧。

玩笑归玩笑,不过自己哪根筋搭错了,突然想起一个问题来,想起一个sql优化案例来。
有兴趣可以参考 通过图表简化sql语句的表关联   http://blog.itpub.net/23718752/viewspace-1455102/
我举一个略微简单的例子,有这么一条sql语句,性能还能够接受,但是在做审核的时候老感觉哪里不对劲。
select subscriber.customer_id,subscriber.xxxx from customer,subscriber,account
where customer.customer_id=account.customer_id
and customer.customer_id=subscriber_id
and subscriber.customer_id=account.customer_id
and subscriber.xxxx

这个语句的输出就是要显示用户的信息。
三者的关系可以这么来描述,就是典型的三户模型,客户,用户,账户。

按照三户模型,一个客户可以对应多个用户,一个客户可以对应多个账户,而用户和账户之间没有直接的映射,而是通过一个中间的属性来映射。
所以按照这个模型,可以肯定的是一个用户对应的客户只有一个,即subscriber.customer_id是唯一对应的。
一个账户对应的客户只有一个,即account.customer_id是唯一的。
所以如果用户和账户归属于同一个客户,即subscriber.customer_id=account.customer_id就可以唯一确定一个客户
所以说上面的查询过滤条件
customer.customer_id=account.customer_id
and customer.customer_id=subscriber_id
and subscriber.customer_id=account.customer_id
是不是从业务来看是不是显得有些多余啊。
其实直接可以根据一句subscriber.customer_id=account.customer_id就可以锁定对应的customer_id了。
所以语句就可以直接修改为下面的形式,因为业务上肯定是支持的,直接去除了customer表。
select subscriber.customer_id,subscriber.xxxx from subscriber,account
where  subscriber.customer_id=xxxx
and subscriber.customer_id and account.customer_id
and subscriber.xxxx

世界中的关系还真是微妙,我想我们的关系就是linkedin要做的事情吧。而在脑洞大开联想起sql调优来看,在熟悉业务的基础上调优也会有一个大的提升。
目录
相关文章
|
2月前
|
人工智能 自然语言处理 供应链
从体验到系统工程丨上手评测国内首款 AI 电商 App
近期,1688 推出了 1688 AI App,这貌似是国内第一个电商领域的独立 AI App 应用(若不是,欢迎评论指正)。本文试图通过产品界面这一入口,窥探其背后的系统工程。
413 32
|
4月前
|
移动开发 小程序 开发工具
揭秘微信/支付宝6大支付方式:从扫码到刷脸,谁在偷偷赚你的手续费?优雅草卓伊凡
揭秘微信/支付宝6大支付方式:从扫码到刷脸,谁在偷偷赚你的手续费?优雅草卓伊凡
863 0
揭秘微信/支付宝6大支付方式:从扫码到刷脸,谁在偷偷赚你的手续费?优雅草卓伊凡
|
云安全 弹性计算 Linux
幻兽帕鲁Palworld服务器部署教程(阿里云服务器3分钟搭建幻兽帕鲁保姆级攻略)
想要部署属于自己的幻兽帕鲁服务器(Dedicated Server),您首先需要拥有一台服务器,服务器是幻兽帕鲁运行的基础。部署完成后,您和您的朋友便可以登入专属的游戏服进行体验。使用云服务器搭建幻兽帕鲁服务器,便可以让您与您的朋友在一个相对独立且私密的空间中进行游戏,确保获得更加畅快的游戏体验。 您可以选择阿里云服务器作为游戏服务器,并按照下面教程来部署幻兽帕鲁。
|
9月前
|
存储 SQL 分布式计算
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
202 0
|
12月前
|
Windows
wmiprvse.exe是什么进程?
wmiprvse.exe cpu占用资源很高怎么禁用?
1155 5
|
存储 消息中间件 缓存
中间件redis的使用
【9月更文挑战第28天】Redis 是一个开源的、基于内存的数据结构存储系统,可用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,使其在各种应用场景中表现出色。Redis 作为缓存中间件能显著提高数据访问速度,其缓存过期策略有助于管理数据生命周期。在 .NET 应用程序中使用 Redis 缓存,可通过安装 `StackExchange.Redis` 库并连接到 Redis 服务器来实现数据的读写操作。此外,Redis 作为消息中间件,基于生产者-消费者模型实现消息队列,确保消息的可靠性和顺序性。
454 4
|
安全 5G 网络安全
什么是 Wi-Fi 热点?
【8月更文挑战第24天】
3408 0
|
小程序 API
【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字)
【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字)
353 0
|
IDE Java 开发工具
灵活配置 Spring 集合:List、Set、Map、Properties 详解
使用<property>标签的value属性配置原始数据类型和ref属性配置对象引用的方式来定义Bean配置文件。这两种情况都涉及将单一值传递给Bean
434 1
|
存储 安全 Java
软件测试中的压力测试是什么?
软件测试中的压力测试是什么?
363 0