2

2 つのテーブルcompanyとでうまく動作するこのクエリがありますquestion。両方のテーブルは、次のように構成されています。

company   |  question
id        |  id
name      |  company_id
          |  sentiment

SELECT company.id as company_id, company.name,  question.sentiment,
(SELECT count(*) FROM question 
WHERE question.sentiment=0 AND question.company_id=company.id) AS count
FROM question
JOIN company ON company.id=question.company_id
 WHERE question.sentiment = 0 GROUP BY company_id ORDER BY count DESC LIMIT 5

クエリの実行が遅くなるように見えるサブクエリを回避するために、これを書き直す方法を見つけようとしています。質問テーブルには 1000 を超えるレコードがあります。また、インデックスを使用すると、実行時間が 545.037 秒から 180.228 秒に短縮されましたが、これを改善する必要があります。

ありがとう

4

1 に答える 1

2
ALTER TABLE question ADD INDEX (sentiment, company_id);

SELECT c.id as company_id, c.name, q.sentiment, q.count
FROM company c
JOIN (
    SELECT company_id, MAX(sentiment) AS sentiment, COUNT(*) AS count
    FROM question
    WHERE sentiment = 0
    GROUP BY company_id
    ORDER BY NULL
) AS q ON c.id = q.company_id
ORDER BY count DESC LIMIT 5
于 2012-12-15T18:50:33.220 に答える