mysql 强制执行顺序

http://linux.chinaunix.net/techdoc/database/2008/07/29/1021449.shtml
http://www.cnblogs.com/wzjbk/p/5813956.html

遇到一个问题

SELECT DISTINCT t.id
FROM TRANSACTION t
    ,action a
    ,svr_nodes m
    ,svr_nodes s
WHERE (
        t.STATUS NOT IN (
            1
            ,9
            ,10
            )
        OR (
            t.STATUS = 9
            AND t.UpdateTime >= '2017-06-20 01:09:44'
            )
        OR (
            t.STATUS = 10
            AND t.UpdateTime >= '2017-06-20 01:09:44'
            AND EXISTS (
                SELECT 1
                FROM action a2
                WHERE t.id = a2.transid
                    AND a2.STATUS <> 2
                )
            )
        )
    AND t.id = a.transid
    AND (
        (
            (
                t.type IN (
                    128
                    ,371
                    ,283
                    ,273
                    ,404
                    )
                )
            AND (
                a.IdName = m.node_name
                OR a.IdName = s.node_name
                )
            AND m.node_name = s.peer_name
            AND m.peer_name = s.node_name
            AND (
                m.node_ip IN (
                    '10.205.128.183'
                    ,'10.205.128.213'
                    )
                OR s.node_ip IN (
                    '10.205.128.183'
                    ,'10.205.128.213'
                    )
                )
            )
        OR (
            t.type IN (
                363
                ,281
                )
            AND t.SetId = '5'
            AND t.AppId = '29'
            )
        );

这句sql 执行顺序没有按照预想的来
执行计划

根据上面引用了两篇博客, 加了一句hint

select distinct t.id from transaction t STRAIGHT_JOIN action a ...

于是执行计划变成下面这样
修改后执行计划
查询会在2秒左右返回. 之前的跑了一天都没有返回.
mysql 执行计划有时候不按照我们预想的来执行, 所以只能用hint 来告诉服务器按照什么顺序连接各个表了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值