首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Concat优化

Concat优化
EN

Stack Overflow用户
提问于 2016-05-12 15:13:12
回答 1查看 234关注 0票数 0
代码语言:javascript
复制
CONCAT(me.nativeName,tp.nativeName) NOT IN (SELECT CONCAT(e_node,e_n_t)
                                                          FROM m_tp_info
                                                          WHERE m_id = mid)

有什么方法可以优化这个concat吗?

EN

回答 1

Stack Overflow用户

发布于 2016-05-12 15:22:47

对于大多数DBMS,我会以语义上有意义的方式来处理:

代码语言:javascript
复制
SELECT  ...
FROM    ...
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    m_tp_info AS i
            WHERE   i.mid = me.m_id
            AND     CONCAT(i.e_node, i.e_n_t) = CONCAT(me.nativeName,tp.nativeName)
        )

但是MySQL通常会优化LEFT JOIN/IS NULL better than NOT IN or NOT EXISTS,所以你可以试试:

代码语言:javascript
复制
SELECT  ...
FROM    ...
        LEFT JOIN m_tp_info AS i
            ON i.mid = me.m_id
            AND CONCAT(i.e_node, i.e_n_t) = CONCAT(me.nativeName,tp.nativeName)
WHERE   i.mid IS NULL;

当然,如果您只是使用CONCAT,因为您想要比较两列,而NOT IN不允许这样做,那么您可以只连接这两列:

代码语言:javascript
复制
SELECT  ...
FROM    ...
        LEFT JOIN m_tp_info AS i
            ON i.mid = me.m_id
            AND i.e_node = me.nativeName
            AND i.e_n_t = tp.nativeName
WHERE   i.mid IS NULL;

代码语言:javascript
复制
SELECT  ...
FROM    ...
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    m_tp_info AS i
            WHERE   i.mid = me.m_id
            AND     i.e_node = me.nativeName
            AND     i.e_n_t = tp.nativeName
        );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37179778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档