2017-01-11 80 views
1

これらはすべてcronジョブPHPとして動作していますが、動作していますが、遅くなると思われ、効率的だとは思いません。 5つのクエリがあり、その背後にある基本的な考え方は、新しいSKUをテーブルに見つけてMasterSKUテーブルに挿入することです。複数の表から1つの問合せへの複数の挿入および選択文?

INSERT INTO MasterSKU (SKU) 
SELECT DISTINCT SKU 
FROM AmazonListings 
WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE AmazonListings.SKU = MasterSKU.SKU); 

 

INSERT INTO MasterSKU (SKU) 
SELECT DISTINCT SKU 
FROM ShopifyListings 
WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE ShopifyListings.SKU = MasterSKU.SKU); 

 

INSERT INTO MasterSKU (SKU) 
SELECT DISTINCT SKU 
FROM eBayListings_1 
WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE eBayListings_1.SKU = MasterSKU.SKU); 

 

INSERT INTO MasterSKU (SKU) 
SELECT DISTINCT SKU 
FROM eBayListings_2 
WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE eBayListings_2.SKU = MasterSKU.SKU); 

 

INSERT INTO MasterSKU (SKU) 
SELECT DISTINCT SKU 
FROM eBayListings_3 
WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE eBayListings_3.SKU = MasterSKU.SKU); 

次に、PHPスクリプトで1つずつ、mysqli_queryを使用して個々のクエリを実行します。

これらのすべてをグルーピングすることはできますか。すべてが同じテーブルに入っていますが、FROM異なるテーブルはありますか?またはこれを行うためのより良い、より最適化された方法がありますか?

答えて

1

答えはいいえ、はいです。

お互いに関連していない複数のテーブルからデータを抽出する場合は、別々のクエリを使用する必要があるため、これはいいえです。

sqlではunionを使用して複数のクエリの結果を一緒に追加できるため、同じ数のフィールドがある場合はyesです。

INSERT INTO MasterSKU (SKU) 
    (SELECT DISTINCT SKU 
    FROM AmazonListings 
    WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE AmazonListings.SKU = MasterSKU.SKU)) 
    union 
    (SELECT DISTINCT SKU 
    FROM ShopifyListings 
    WHERE NOT EXISTS (SELECT SKU 
        FROM MasterSKU 
        WHERE ShopifyListings.SKU = MasterSKU.SKU) 
    union ... 
+0

それはそう時間はかかりませんので、私は、実際のクエリを最適化することができない場合は、それがあることを要する場合(クエリは34.7357秒を要した) '..疑問に思う働いたが、クエリは永遠にかかった...'はい(クエリが2.6736秒を要した) ' – bbruman

+0

テーブルに重複しているskusがない場合は、単純なunionの代わりに' union all'を使います。それはクエリを高速化します。 – Shadow

+0

'(クエリは29.4768秒かかりました)'に降格しましたが、とにかく、テーブルに重なっているskusがあります。 'unique'カラムを持つ唯一のものは' MasterSKU'テーブルのSKUです。 – bbruman

関連する問題