0

私は次のようなテーブルを持っています、

id  | OpenDate             |  CloseDate
------------------------------------------------
1   | 2013-01-16 07:30:48  |  2013-01-16 10:49:48
2   | 2013-01-16 08:30:00  |  NULL

以下のように組み合わせた結果を得る必要がありました

 id | date                 |   type
 ---------------------------------
 1  | 2013-01-16 07:30:48  |  Open
 1  | 2013-01-16 10:49:48  |  Close
 2  | 2013-01-16 08:30:00  |  Open

上記の出力を取得するために UNION を使用しました (UNION なしで達成できますか?)

SELECT id,date,type FROM(
   SELECT id,`OpenDate` as date, 'Open' as 'type' FROM my_table
  UNION ALL
   SELECT id,`CloseDate` as date, 'Close' as 'type' FROM my_table
                       )AS `tab` LIMIT 0,15

目的の出力を取得していますが、現在はパフォーマンス面で-> テーブルに 4000 レコードがあり、UNION を実行して約 8000 レコードを結合し、サイトの読み込みが非常に遅くなります (13 秒以上)。このクエリを最適化して出力を固定するにはどうすればよいですか?

サブクエリでも試しLIMITましたが、サブクエリで使用すると、ページネーションオフセットが正しく機能しませんLIMIT。これを解決するのを手伝ってください。

アップデート

EXPLAIN 結果

id   select_type  table     type   key    key_len    ref     rows   Extra
1    PRIMARY     <derived2> ALL   NULL      NULL      NULL   8858    
2    DERIVED     orders     index OpenDate   4        NULL   4588   Using index
3    UNION       orders     index CloseDate  4        NULL   4588   Using index
NULL UNION RESULT<union2,3> ALL   NULL      NULL      NULL   NULL    
4

1 に答える 1

1

私は次のようなことをします:

SELECT
  id,
  IF(act, t1.OpenDate, t1.CloseDate) as `date`,
  IF(act, 'Open', 'Close') as `type`
FROM my_table t1
JOIN (SELECT 1 as act UNION SELECT 0) as _
JOIN my_table t2 USING (id);
于 2013-01-17T13:10:18.577 に答える