1

我有一个大表,我构建了两个查询,首先查询前 2 列,然后查询其他列。我的意图显然是将前 2 列数据放在顶部,然后在下面附加其他列的数据。这是查询。

SELECT * FROM (SELECT * FROM mytable WHERE A LIKE 'query%' OR G LIKE 'query%' ORDER BY LENGTH(A) )
UNION ALL
SELECT * FROM (SELECT * FROM mytable WHERE I LIKE 'query' OR J LIKE 'query' LIMIT 15)

这工作正常,但它太慢了。有什么办法可以让它更快。因为我觉得我在做不必要的 SELECTS (4)。也许我可以做类似的事情(我在 Stackoverflow 上看到了这个建议):

SELECT  * 
FROM 
        (
            SELECT *, 1 sortby FROM TABLE_A 
            UNION ALL 
            SELECT *, 2 sortby FROM TABLE_B
        ) dum
ORDER   BY sortby 

但我不知道如何为我的情况做这件事。

非常感谢。

4

2 回答 2

1

你是对的。您的查询中有 2 个不需要的选择。这会起作用,但我怀疑它会不会有更好的表现。

SELECT * FROM mytable WHERE A LIKE 'query%' OR G LIKE 'query%' 
UNION ALL
SELECT * FROM mytable WHERE I LIKE 'query' OR J LIKE 'query' LIMIT 15
ORDER BY LENGTH(A)
于 2014-01-04T14:18:50.747 回答
-1

你试试这个:

Select m1.A,m2.I from (SELECT A FROM mytable m1 WHERE A LIKE 'query%' OR G LIKE 'query%'

ORDER BY LENGTH(A)

 UNION ALL

SELECT I FROM mytable m2 WHERE I LIKE 'query' OR J LIKE 'query' LIMIT 15))
ORDER BY m1.A,m2.I
于 2014-01-04T14:25:24.533 回答