求教一下,这种格式的 SQL 该怎么优化

2021-04-14 11:14:27 +08:00
 hiahiahiahia
SELECT(
    SELECT 根据表 A 或者表 B 进行函数计算 
    FROM 表 A JOIN 表 B 
 	ON 表 A.id = 表 B.id 
    WHERE 
    	表 C.id = 表 A.C_ID
        ) AS 字段名 
FROM 表 C
WHERE *****

试过把表 C 放在里面 join,或者把子查询里面的函数取出来,全部放最外面 where;
但是数据都不对,有没有老哥知道怎么优化

2874 次点击
所在节点    MySQL
16 条回复
hiahiahiahia
2021-04-14 11:14:39 +08:00
原始 SQL 大概有八九个这样查询的字段,崩溃了
hiahiahiahia
2021-04-14 11:27:36 +08:00
目前查询大概一分钟左右
fiypig
2021-04-14 11:31:53 +08:00
explain 先看下效果, 我看索引那些都有了把
hiahiahiahia
2021-04-14 11:35:45 +08:00
@fiypig 索引都有,执行计划里大部分都是 all
akira
2021-04-14 11:37:01 +08:00
数据不对那就是 sql 都没有写对了啊。join 这个东西 确实容易写错的
lyqqqq
2021-04-14 13:21:57 +08:00
SELECT(根据表 A 或者表 B 进行函数计算) AS 字段名
FROM 表 C
JOIN 表 A ON 表 C.id = 表 A.C_ID
JOIN 表 B ON 表 A.id = 表 B.id
WHERE *****

有时候是 函数计算 的锅
stevenbipt
2021-04-14 13:53:51 +08:00
看看内部 select 自查询的时候有没有命中索引
wengyanbin
2021-04-14 14:10:28 +08:00
SELECT 根据表 A 或者表 B 进行函数计算
FROM 表 A JOIN 表 B
ON 表 A.id = 表 B.id
WHERE A.C_ID IN(SELECT ID FROM 表 C WHERE 条件)
或者把 in 语句换成 exists 语句试下
hiahiahiahia
2021-04-14 14:28:21 +08:00
@lyqqqq 试过这种,查出来的数据是错的
hiahiahiahia
2021-04-14 14:28:37 +08:00
@wengyanbin 没有 in 语句
wengyanbin
2021-04-14 16:39:11 +08:00
@hiahiahiahia 我的意思是让你将原语句改写成 in 语句或者 exists 语句的格式,看下执行效率跟结果
shoushi
2021-04-14 16:48:52 +08:00
函数计算 索引不是会失效么
x2009again
2021-04-14 17:23:11 +08:00
把 where 的条件也放入 join 的 on 上去试试
CodeUtils
2021-04-14 17:36:17 +08:00
表的数据量大小关系是怎么样的?
jhdxr
2021-04-14 17:38:11 +08:00
这帖子问的是查询结果是错的怎么办。。。
超过一半回复都在评论查询效率 _(:з」∠)_
c6h6benzene
2021-04-14 17:53:43 +08:00
可能我技术不够,但子查询里面没有表 C,where 里面却有表 C 的字段,这真的不会报错吗…?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX