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

hiahiahiahia 1月前 24

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;
但是数据都不对,有没有老哥知道怎么优化

最新回复 (16)
  • 楼主 hiahiahiahia 24天前
    引用 2
    原始 SQL 大概有八九个这样查询的字段,崩溃了
  • 楼主 hiahiahiahia 24天前
    引用 3
    目前查询大概一分钟左右
  • fiypig 24天前
    引用 4
    explain 先看下效果, 我看索引那些都有了把
  • 楼主 hiahiahiahia 24天前
    引用 5
    @fiypig 索引都有,执行计划里大部分都是 all
  • akira 24天前
    引用 6
    数据不对那就是 sql 都没有写对了啊。join 这个东西 确实容易写错的
  • lyqqqq 24天前
    引用 7
    SELECT(根据表 A 或者表 B 进行函数计算) AS 字段名
    FROM 表 C
    JOIN 表 A ON 表 C.id = 表 A.C_ID
    JOIN 表 B ON 表 A.id = 表 B.id
    WHERE *****

    有时候是 函数计算 的锅
  • stevenbipt 24天前
    引用 8
    看看内部 select 自查询的时候有没有命中索引
  • wengyanbin 24天前
    引用 9
    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 24天前
    引用 10
    @lyqqqq 试过这种,查出来的数据是错的
  • 楼主 hiahiahiahia 24天前
    引用 11
    @wengyanbin 没有 in 语句
  • wengyanbin 24天前
    引用 12
    @hiahiahiahia 我的意思是让你将原语句改写成 in 语句或者 exists 语句的格式,看下执行效率跟结果
  • shoushi 24天前
    引用 13
    函数计算 索引不是会失效么
  • x2009again 24天前
    引用 14
    把 where 的条件也放入 join 的 on 上去试试
  • CodeUtils 24天前
    引用 15
    表的数据量大小关系是怎么样的?
  • jhdxr 24天前
    引用 16
    这帖子问的是查询结果是错的怎么办。。。
    超过一半回复都在评论查询效率 _(:з」∠)_
  • c6h6benzene 24天前
    引用 17
    可能我技术不够,但子查询里面没有表 C,where 里面却有表 C 的字段,这真的不会报错吗…?
  • 游客
    18
返回