MySQL排序:NULL到结尾和使用索引?不可能?

Voj*_*jto 5 mysql

我有一张巨大的桌子,我想要简单的排序.

它可能很容易.我可以创建一个索引并通过该索引进行一些非常快速的排序.

但我的客户想要将NULL放到最后,这使整个情况变得复杂.

而不是简单:SORT BY name ASC我必须这样做SORT BY name IS NULL ASC, name ASC.那没关系,但是因为我的索引没用,而且排序很慢.

我不知道是否有办法解决这个问题,但如果有的话,我拼命寻求帮助.:'(

Qua*_*noi 5

UNION ALL不保证保留记录顺序,但是对于当前实现,最终ORDER BY将只对已经排序的字段进行一次传递:

SELECT  *
FROM    (
        SELECT  1 AS source, *
        FROM    user
        WHERE   name IS NOT NULL
        ORDER BY
                name
        )
UNION ALL
SELECT  2 AS source, *
FROM    user
WHERE   name IS NULL
ORDER BY
        source, name
Run Code Online (Sandbox Code Playgroud)

省略决赛ORDER BY可能会在将来破坏您的申请.

这可能是在客户端将查询拆分为两个的最佳情况之一.