Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中通过查询优化获得组合结果?_Mysql_Query Optimization_Union - Fatal编程技术网

如何在MySQL中通过查询优化获得组合结果?

如何在MySQL中通过查询优化获得组合结果?,mysql,query-optimization,union,Mysql,Query Optimization,Union,我有一张桌子 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 -------------------

我有一张桌子

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
我使用联合来获得高于输出(没有联合我们能实现吗?)

我正在获得所需的输出,但现在在performance side-->中,我的表中有4000条记录,通过进行UNION合并并提供大约8000条记录,这使得加载站点的速度非常慢(超过13秒)。如何优化此查询以加快输出

我在子查询中尝试了
LIMIT
,如果在子查询中使用
LIMIT
,分页偏移量也不能正常工作。请帮我解决这个问题

更新

解释结果

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    
id选择类型表类型键参考行额外
1主所有空值8858
2衍生订单索引OpenDate 4空4588使用索引
3联合订单索引关闭日期4空4588使用索引
NULL联合结果所有NULL

我将执行以下操作:

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);

是否要限制所选行的数量<代码>选择前100名可能吗?@new野心否我想选择所有记录
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);