0

私は2つのテーブルを持っていますproductssalesRecords

私はこのクエリを使用しています:

SELECT 
    DAY(FROM_UNIXTIME(saleDate)) as day,
    MONTH(FROM_UNIXTIME(saleDate)) as mnth,
    YEAR(FROM_UNIXTIME(saleDate)) as yr,   
    COUNT(id) as invCount, SUM(quantity) as qty 
 FROM salesRecords WHERE itemNo IN 
      (SELECT GROUP_CONCAT(convert(id, CHAR(8))) as ids FROM products WHERE brand =100 GROUP by brand) 
    GROUP BY 
       mnth, yr 
    ORDER BY saleDate

products テーブルには、製品について知る必要があるすべてが含まれており、salesRecords には、saleDate、販売数量、割引などの詳細が含まれているため、ここで達成しようとしているのは、ブランド ID を持つすべての製品の売上のリストです100。 「saleDate」と呼ばれる Unix Time フィールドの月と年

動作しますが、非常に遅いです。

誰でもこれを行うためのより速い方法をアドバイスできますか?

ID のリストを手動でクエリに挿入すると、より高速に動作するように見えますが、2 つのクエリを実行する必要がありますか?

4

1 に答える 1

1

単一の内部結合でクエリを書き直しました。それを試して、ニュースで戻ってきてください:

SELECT 
    DAY(FROM_UNIXTIME(saleDate)) as day,
    MONTH(FROM_UNIXTIME(saleDate)) as mnth,
    YEAR(FROM_UNIXTIME(saleDate)) as yr,   
    COUNT(id) as invCount, 
    SUM(quantity) as qty 
 FROM salesRecords s inner join 
      products on s.itemNo = p.id 
 WHERE 
      p.brand =100
 GROUP BY 
       `day`, mnth, yr 
 ORDER BY 
       saleDate

また、where句を避けるために、on操作に制限を加えることができます:

    ...
    SUM(quantity) as qty 
 FROM salesRecords s inner join 
      products on p.brand =100 and s.itemNo = p.id 
 GROUP BY 
    ...
于 2012-05-03T14:19:04.570 に答える