我有一个大表,我已经构建了两个查询,首先查询前两列然后 其他专栏。我的意图显然是将前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)
这样可以,但速度太慢了。有什么方法可以让它更快。因为我 感觉我正在做不必要的选择(4)。 也许我可以做类似的东西(我在Stackoverflow上看到了这个建议):
SELECT *
FROM
(
SELECT *, 1 sortby FROM TABLE_A
UNION ALL
SELECT *, 2 sortby FROM TABLE_B
) dum
ORDER BY sortby
但我不知道如何为我的情况做这件事。
非常感谢。
答案 0 :(得分: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)
答案 1 :(得分:-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