› 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 · Apr 14, 2021 · 4187 views
    This topic created in 1992 days ago, the information mentioned may be changed or developed.
    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 replies  •  2021-04-14 17:53:43 +08:00
    hiahiahiahia
        1
    hiahiahiahia  
    OP
       Apr 14, 2021
    原始 SQL 大概有八九个这样查询的字段,崩溃了
    hiahiahiahia
        2
    hiahiahiahia  
    OP
       Apr 14, 2021
    目前查询大概一分钟左右
    fiypig
        3
    fiypig  
       Apr 14, 2021
    explain 先看下效果, 我看索引那些都有了把
    hiahiahiahia
        4
    hiahiahiahia  
    OP
       Apr 14, 2021
    @fiypig 索引都有,执行计划里大部分都是 all
    akira
        5
    akira  
       Apr 14, 2021
    数据不对那就是 sql 都没有写对了啊。join 这个东西 确实容易写错的
    lyqqqq
        6
    lyqqqq  
       Apr 14, 2021
    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  
       Apr 14, 2021
    看看内部 select 自查询的时候有没有命中索引
    wengyanbin
        8
    wengyanbin  
       Apr 14, 2021
    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
       Apr 14, 2021
    @lyqqqq 试过这种,查出来的数据是错的
    hiahiahiahia
        10
    hiahiahiahia  
    OP
       Apr 14, 2021
    @wengyanbin 没有 in 语句
    wengyanbin
        11
    wengyanbin  
       Apr 14, 2021
    @hiahiahiahia 我的意思是让你将原语句改写成 in 语句或者 exists 语句的格式,看下执行效率跟结果
    shoushi
        12
    shoushi  
       Apr 14, 2021
    函数计算 索引不是会失效么
    x2009again
        13
    x2009again  
       Apr 14, 2021
    把 where 的条件也放入 join 的 on 上去试试
    CodeUtils
        14
    CodeUtils  
       Apr 14, 2021
    表的数据量大小关系是怎么样的?
    jhdxr
        15
    jhdxr  
       Apr 14, 2021
    这帖子问的是查询结果是错的怎么办。。。
    超过一半回复都在评论查询效率 _(:з」∠)_
    c6h6benzene
        16
    c6h6benzene  
       Apr 14, 2021 via iPhone
    可能我技术不够,但子查询里面没有表 C,where 里面却有表 C 的字段,这真的不会报错吗…?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2699 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 07:04 · PVG 15:04 · LAX 00:04 · JFK 03:04
    ♥ Do have faith in what you're doing.