查询过多,或者这是犹太人?

时间:2011-12-02 18:52:19

标签: mysql optimization query-optimization subquery

这是我当前的查询:

SELECT * FROM (
    SELECT * FROM feesbydate
    LEFT JOIN (
        SELECT MAX(from_date) as the_date FROM (
            SELECT a.* FROM feesbydate a, feesbydate b
            WHERE a.exchFee_ID = 15 AND b.exchFee_ID = 15 
                    AND a.from_date <= b.from_date
                    AND a.id <> b.id AND b.id = 62
            GROUP BY a.id
        ) a) b on from_date < the_date
    WHERE exchFee_ID = 15) c
 WHERE not(isnull(the_date));

基本上我有一个包含以下列的表:

  

id | exch_feeID | from_date | to_date |其他不相关的专栏

我希望获得from_date之前之前某个id(在上面的示例中为62)且具有某个{的所有记录{1}}(在上面的示例中为exchFee_ID)。

上面的查询有效。但随着我的桌子的增长,这可能不是最理想的。是否有更高性能或更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

只需做一个简单的加入:

SELECT *
  FROM feesbydate AS f,
       ( SELECT from_date
           FROM feesbydate
          WHERE id = 62
            AND exchFee_ID = 15 ) AS g
 WHERE f.exchFee_ID = 15
   AND f.from_date < g.from_date

只要您能保证每条记录的值都存储在from_date下,这就足够了。

答案 1 :(得分:-2)

只要你的密钥和索引是理智的,这很好。 SQL是 这样的复杂性。不要害怕使用它。

但如果您怀疑性能问题,请先对它们进行基准测试,然后再进行优化。