mysql优化 - mysql在连多表的情况下where优化的问题。
大家讲道理
大家讲道理 2017-04-17 13:51:41
[MySQL讨论组]
SELECT
        *
FROM
        (
                SELECT
                        a.id,
                        c.name AS external_name,
                        b.customer_number,
                        b.name,
                        a.number,
                        d.number as order_number,
                        e.code,
                        e.name as stock_name,
                        a.completed_at,
                        a.trade_count,
                        a.trade_price,
                        a.trade_count * a.trade_price as trade_amount
                FROM
                        trades a,
                        internal_accounts b,
                        external_accounts c,
                        orders d,
                        stocks e
                WHERE
                        a.internal_account_id = b.id
                AND c.id = a.external_account_id
                AND b.state != 8
                AND d.id = a.order_id
                AND e.code = d.stock_code
        ) AS f
ORDER BY
        f.id DESC

这种情况下如何做到最优啊Orz。
全局连表得查10s,数据大概12w的样子。

采用外连可以快一半的样子,但是感觉还不够快。

explain SELECT
    a.id,
    c.name AS external_name,
    b.customer_number,
    b.name,
    a.number,
    d.number AS order_number,
    e.code,
    e.name AS stock_name,
    a.completed_at,
    a.trade_count,
    a.trade_price,
    a.trade_count * a.trade_price AS trade_amount
FROM
    trades a
LEFT JOIN internal_accounts b ON a.internal_account_id = b.id
LEFT JOIN external_accounts c ON c.id = a.external_account_id
LEFT JOIN orders d ON d.id = a.order_id
LEFT JOIN stocks e ON e. CODE = d.stock_code
WHERE
    b.state != 8
ORDER BY
    a.id DESC
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
PHP中文网

1、只联合查询变化频繁和结合紧密的数据,那种不太变化的数据,扔到一个key-value数组,在显示的时候用key显示关联的value。
2、该冗余的数据冗余起来,比如在a表里放一个 c.name,就少了c这个联表查询。
3、你给出的SQL中,最外层的括号f没必要,内层SQL就可以排序并得到想要的数据了。
4、最后把精简过的SQL explain一下,给关键的列加上索引。

怪我咯

多嵌套了一层是没必要的,然后用explain看看哪里需要加索引呢?或者贴一下explain的结果呢

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号