まず、この質問は MySQL 3.23.58 に関するものですので、ご注意ください。
次の定義を持つ2つのテーブルがあります。
Table A: id INT (primary), customer_id INT, offlineid INT
Table B: id INT (primary), name VARCHAR(255)
現在、テーブル A には 65,000 件以上のレコードが含まれ、テーブル B には最大 40 件のレコードが含まれています。2 つの主キー インデックスに加えて、テーブル A のofflineidフィールドにもインデックスがあります。各テーブルにはさらに多くのフィールドがありますが、このクエリには関係ありません (必要に応じて確認してください)。
最初に次のクエリが表示されました (クエリ時間: ~22 秒):
SELECT b.name, COUNT(*) AS orders, COUNT(DISTINCT(a.kundeid)) AS leads
FROM katalogbestilling_katalog a, medie b
WHERE a.offlineid = b.id
GROUP BY b.name
現在、medie の各 ID は異なる名前に関連付けられています。つまり、名前だけでなく ID でもグループ化できます。少しテストを行ったり来たりして、これに落ち着きました(クエリ時間:〜6秒):
SELECT a.name, COUNT(*) AS orders, COUNT(DISTINCT(b.kundeid)) AS leads
FROM medie a
INNER JOIN katalogbestilling_katalog b ON a.id = b.offline
GROUP BY b.offline;
「瞬時」の時間 (最悪の場合、最大 1 秒) まで下げる方法はありますか? オフラインIDにインデックスを追加したのですが、それとクエリの並び替え以外にどうしたらいいのか途方に暮れています。EXPLAIN クエリは、クエリが fileshort を使用していることを示しています (元のクエリも一時テーブルを使用していました)。すべての提案を歓迎します!