V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
hiahiahiahia
V2EX  ›  MySQL

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

  •  
  •   hiahiahiahia · 2021-04-14 11:14:27 +08:00 · 3052 次点击
    这是一个创建于 1314 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条回复    2021-04-14 17:53:43 +08:00
    hiahiahiahia
        1
    hiahiahiahia  
    OP
       2021-04-14 11:14:39 +08:00
    原始 SQL 大概有八九个这样查询的字段,崩溃了
    hiahiahiahia
        2
    hiahiahiahia  
    OP
       2021-04-14 11:27:36 +08:00
    目前查询大概一分钟左右
    fiypig
        3
    fiypig  
       2021-04-14 11:31:53 +08:00
    explain 先看下效果, 我看索引那些都有了把
    hiahiahiahia
        4
    hiahiahiahia  
    OP
       2021-04-14 11:35:45 +08:00
    @fiypig 索引都有,执行计划里大部分都是 all
    akira
        5
    akira  
       2021-04-14 11:37:01 +08:00
    数据不对那就是 sql 都没有写对了啊。join 这个东西 确实容易写错的
    lyqqqq
        6
    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
        7
    stevenbipt  
       2021-04-14 13:53:51 +08:00
    看看内部 select 自查询的时候有没有命中索引
    wengyanbin
        8
    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
        9
    hiahiahiahia  
    OP
       2021-04-14 14:28:21 +08:00
    @lyqqqq 试过这种,查出来的数据是错的
    hiahiahiahia
        10
    hiahiahiahia  
    OP
       2021-04-14 14:28:37 +08:00
    @wengyanbin 没有 in 语句
    wengyanbin
        11
    wengyanbin  
       2021-04-14 16:39:11 +08:00
    @hiahiahiahia 我的意思是让你将原语句改写成 in 语句或者 exists 语句的格式,看下执行效率跟结果
    shoushi
        12
    shoushi  
       2021-04-14 16:48:52 +08:00
    函数计算 索引不是会失效么
    x2009again
        13
    x2009again  
       2021-04-14 17:23:11 +08:00
    把 where 的条件也放入 join 的 on 上去试试
    CodeUtils
        14
    CodeUtils  
       2021-04-14 17:36:17 +08:00
    表的数据量大小关系是怎么样的?
    jhdxr
        15
    jhdxr  
       2021-04-14 17:38:11 +08:00
    这帖子问的是查询结果是错的怎么办。。。
    超过一半回复都在评论查询效率 _(:з」∠)_
    c6h6benzene
        16
    c6h6benzene  
       2021-04-14 17:53:43 +08:00 via iPhone
    可能我技术不够,但子查询里面没有表 C,where 里面却有表 C 的字段,这真的不会报错吗…?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5887 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:47 · PVG 10:47 · LAX 18:47 · JFK 21:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.