代码之家  ›  专栏  ›  技术社区  ›  Brian Lacy

简单的mysql查询需要45秒(获取一条记录及其“最新”子记录)

  •  3
  • Brian Lacy  · 技术社区  · 14 年前

    我有一个查询得到一个客户和该客户的最新交易。目前,1000条记录的查询时间超过45秒。这尤其有问题,因为脚本本身可能需要每分钟执行一次!

    我相信使用子查询可能是解决问题的方法,但是我在构造子查询以提供我需要的结果时遇到了困难。

    SELECT
        customer.CustID,
        customer.leadid,
        customer.Email,
        customer.FirstName,
        customer.LastName,
        transaction.*,
        MAX(transaction.TransDate) AS LastTransDate
    FROM customer
    INNER JOIN transaction ON transaction.CustID = customer.CustID 
    WHERE customer.Email = '".$email."'
    GROUP BY customer.CustID
    ORDER BY LastTransDate
    LIMIT 1000
    

    我真的需要尽快弄清楚。任何帮助都将不胜感激!

    1 回复  |  直到 14 年前
        1
  •  2
  •   Daniel Vassallo    14 年前

    确保你有一个索引 transaction.CustID ,另一个用于 customer.Email .

    假设 customer.CustID 是主键,应该已经为其编制了索引。

    你可以 create an index 如下:

    CREATE INDEX ix_transaction_CustID ON transaction(CustID);
    CREATE INDEX ix_customer_Email ON customer(Email);
    

    如评论中所建议的,您可以使用 EXPLAIN 命令以了解查询是否正确使用索引。