1

大きなテーブルがあり、最初の 2 つの列を最初にクエリし、次に他の列をクエリする 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 に答える