2017-02-26 11 views
-2

私はわずか30,000行のMySqlデータテーブルを持っています。これは大きなデータテーブルではありませんが、読み込み時間はかなり長くなります(60秒以上)。カテゴリ、製品、会社という3つのテーブルがあります。選択したカテゴリに基づいて製品と企業のデータを読み込む必要があります。ここに私のコードです。それは動作しますが、非常に遅いです。PHP MySql - 非常に遅いデータ読み込み

" 
SELECT p1.CompanyID 
    , p1.NameE as ProductName 
    , p1.CategoryID 
    , c1.CompanyID as CompanyID 
    , c1.NameE as CompanyName 
    FROM Products as p1 
    JOIN Companies as c1 
    ON p1.CategoryID = ".$row['CategoryID']." 
    AND p1.CompanyID = c1.CompanyID 
GROUP 
    BY ProductName 
ORDER 
    BY CompanyName ASC LIMIT 0, 15; 
"; 
+1

クエリの実行計画を入力してください – GurV

+2

集計機能を使用しないでグループを使用する理由は何ですか? ..これは、グループではないカラムのために予期しない結果を返し、mysql 5.7から始まるエラーを引き起こす可能性があります。 – scaisEdge

+0

p1.CategoryID = "。$ rpw ['CategoryID']。ジョインのON句からWHERE句に移動します。これは結合の関係の一部ではなく、プライマリ・テーブルのレコード数を制限します。 –

答えて

-1

結合のON句に使用されている列にインデックスがあることを確認してください。

$queryList = $db->query(
    "SELECT p1.CompanyID, p1.NameE as ProductName, p1.CategoryID, c1.CompanyID as CompanyID, c1.NameE as CompanyName 
    FROM Products as p1 
    INNER JOIN Companies as c1 
    ON p1.CompanyID=c1.CompanyID 
    WHERE p1.CategoryID=".$row['CategoryID']." 
    GROUP BY ProductName 
    ORDER BY CompanyName ASC 
    LIMIT 0, 15"); 
+0

スローンに感謝していただきありがとうございます。しかし、それでもデータをロードするのに30秒以上かかる(60秒から)。私は列にインデックスを持っています。 – Arun

+0

サーバーにはどのハードウェア/ OSを使用していますか?私は30kのダミーレコードでテストを行い、共有ホスティングサーバーで説明するような3つのテーブルを作成しました。クエリを実行するのに要した時間は0.23秒でした。ハードウェアや関連する問題(デフラグなど)以外に、私が考えることができるのはテーブルの定義方法だけです。大きなフィールドタイプを使用していますか?インデックスが定義されていることを確認してください。実行計画が使用されているかどうかを確認してください。あなたのIDフィールドは符号なし整数ですか?あなたのテーブル定義を掲示して、誰かが助けてくれるかもしれないものを見つけ出すかもしれない。 –

関連する問題