关于多表关联查询优化的问题

piao2004 piao2004 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
比如有两个表,
一个是操作记录表
一个是用户表。

操作记录表中,记录用户的操作,【其中用一个字段UserID来保存操作者(即用户)的ID】
我的查询语句是这样的:

select top 20 a.*, u.Name from 操作表 a JOIN 用户表 u on a.UserID=u.ID order by a.ID desc
(则读取最新的20条操作记录,连同操作者的姓名同是给读出来)

这样是没有问题的。
但是,当操作表数据行多到百万级时,问题来了。
【操作表已对需要查询的列创建了索引】
【用户表由于只有几十人,没有建索引】
执行上面那条语句就变得很慢!(10多20秒!)

如果我只读取操作表:
select top 20 a.* from 操作表 a order by a.ID desc
那很快,毫秒级

那么,一定要把用户姓名读出来啊,我换了另外两种写法,一定很快,毫秒级:
select top 20 a.*, u.Name from 操作表 a LEFT JOIN 用户表 u on a.UserID=u.ID order by a.ID desc
【就是把很慢的JOIN改为LEFT JOIN,就变得很快了】

如果下面这样写,也是快得不要不要的
select top 20 a.*, u.Name from 操作表 a, 用户表 u where a.UserID=u.ID order by a.ID desc

为什么只用JOIN的写法会很慢啊?
只想知道原因。

...全文

相关推荐

mysql实现多表关联统计(子查询统计)示例

主要介绍了mysql实现多表关联统计(子查询统计),结合具体案例形式分析了mysql多表关联统计的原理、实现方法及相关操作注意事项,需要的朋友可以参考下

weixin_38530846

Java 里 Hibernate 的多表关联查询优化

在 Java 开发中,Hibernate 是一个广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以通过操作对象来间接操作数据库。然而,在实际应用中,多表关联查询是常见的需求,若处理不当,会导致查询性能低下,影响系统的响应速度和整体性能。本文的目的就是深入探讨 Hibernate 多表关联查询的优化方法,范围涵盖从基本概念到实际应用,从算法原理到代码实现的各个方面,帮助开发者掌握优化技巧,提高查询效率。

AI应用架构探索者

MySQL多表关联优化解析[源码]

本文系统性地解析了MySQL多表关联查询的执行机制,重点介绍了Nested Loop Join(N-LJ)的底层执行过程及其性能瓶颈。文章详细探讨了驱动表选择的重要性,并通过实战案例展示了未加索引情况下的执行计划问题及优化方法。此外,还对比了子查询与关联查询的执行效率,分析了字段级依赖子查询和带UNION的子查询的性能问题,并提供了优化建议。最后,总结了多表关联优化的核心原则,包括主外键字段建索引、控制驱动表数据量、避免SELECT子句中的子查询等,帮助开发者提升SQL查询效率。

寂静夜空35

MySQL 多表关联一对多查询实现取最新一条数据的方法示例

主要介绍了MySQL 多表关联一对多查询实现取最新一条数据的方法,结合实例形式详细分析了MySQL 多表关联一对多查询实现取最新一条数据相关原理、实现方法与操作注意事项,需要的朋友可以参考下

weixin_38616435

oracle多表查询

oracle多表查询的基本概念,例子是oracle默认的表

lrt1800
评论 5
收藏 已收藏
分享
返回顶部
piao2004
MS-SQL Server 34,876 成员 254,635 内容