MySQL对mariaDB的查询非常慢

时间:2019-05-11 20:09:25

标签: mysql mariadb

以下是我要将网站移至的新服务器上的查询。下面的现有查询在运行InnoDB的原始服务器上非常快。 MariaDB 5.6的新服务器异常慢。

在新服务器上唯一需要删除的行是“ AND np.user_id!= su.id”,它再次变得快速。

子查询对速度没有任何影响。

我对不同的数据库版本了解不多,对为什么会有这种情况一无所知。

有人可以阐明这个问题吗?提前致谢。

SELECT
    np.id, np.user_id, np.post_id, np.response_id, np.viewed, np.clicked, np.emailed, np.timestamp,
    su.id AS suUserId, 
    su.fullname AS suFullName, su.username AS suUserName, su.mem_id AS suMemId 
FROM notify_post np 
    LEFT JOIN userfeed pf ON np.response_id IS NULL AND pf.id=np.post_id
    LEFT JOIN userresponses pr ON np.response_id IS NOT NULL AND pr.userfeed_id=np.post_id

    JOIN users su ON 
        (np.response_id IS NULL AND su.id=pf.user_id) 
        OR 
        (np.response_id IS NOT NULL AND su.id=pr.user_id AND pr.id=np.response_id)

WHERE np.user_id=1 
    AND pf.user_id NOT IN (SELECT bk.block_id FROM block bk WHERE bk.user_id=1 AND bk.block_id=pf.user_id)
    AND np.user_id!=su.id
ORDER BY np.timestamp DESC
LIMIT 0,10

1 个答案:

答案 0 :(得分:0)

重新考虑架构设计。这种模式确实对性能不利:

WHERE (x IS NULL     AND ...)
   OR (x IS NOT NULL AND ...)

在一种情况下(ON),它清楚地以这种形式显示,外加两个不太明显的地方。