mysql / sql中的多行“双”表

时间:2010-11-11 16:05:13

标签: mysql optimization

这是“双重”表概念的扩展(为一个查询动态创建临时表并在之后直接丢弃)

我正在尝试将多行dual表连接到另一个表,以避免必须使用1个语句多次使用不同的参数运行相同的查询。

我遇到的一个问题是双表的联合非常慢,我不知道有任何更有效的方法来完成以下操作。 (加入50对偶时100毫秒)

SELECT
  b.id,
  b.ref_unid,
  a.date
  FROM
    (
    SELECT
      'b8518a84-c501-11dd-b0b6-001d7dc91168'  as unid,
      '2010-01-05' as date
   UNION
    SELECT
      'b853a1f2-c501-11dd-b0b6-001d7dc91168',
      '2010-01-06'
   UNION
    SELECT
      'b8557bd0-c501-11dd-b0b6-001d7dc91168',
      '2010-01-07'
   /* ... */
  ) as a
  join other_table b
      ON
      b.ref_unid = a.unid

还有另一种方法可以实现这个目标吗?

是否有类似于insert into values语句的语法可以实现该目标,例如:

SELECT
  unid,
  id
  FROM
    (
      WITH (unid, date) USING VALUES
      (
        ('b8518a84-c501-11dd-b0b6-001d7dc91168','2010-01-05'),
        ('b853a1f2-c501-11dd-b0b6-001d7dc91168','2010-01-06'), 
        ('b8557bd0-c501-11dd-b0b6-001d7dc91168','2010-01-07'),
         /* ... */
      )
    ) as a
  join other_table b
      ON
      b.ref_unid = a.unid

我正在寻找一个1语句解决方案。无法多次访问数据库。

1 个答案:

答案 0 :(得分:1)

没有其他约定我知道在MySQL中可用于在单个语句中构造派生表。如果这涉及单个列,则在~50个值时,可以将其转换为使用IN子句。

表现最佳的方法是将数据加载到一种或多种形式的表中 - 在MySQL中,暂时使用我建议使用MEMORY引擎。在大约50个元组时,我不得不想知道为什么数据不在数据库中......