3

DBから転送される非常に大量のデータを必要とするアプリでの作業。これには、SELECTクエリとUPDATEクエリの両方が含まれます(つまり、DBへの読み取りと書き込み)。

まず、すべての製品のリストを取得する必要があります(約1000 SKU)。SELECTクエリは非常に単純です。

SELECT
    *
FROM
    `my_db`.`products`

次に、各製品に対していくつかの自動更新が行われます。UPDATEクエリは次のようなものです。

UPDATE
    `my_db`.`products`
SET
    `updated` = NOW(),
    `mods` = `mods` + 1,
    /* a couple more updated fields here, if needed */

ここで問題となるのは、すべてのレコードを一度に操作する単一のクエリ、または各製品を個別に処理するPHPループ(foreachまたはwhile)(1000個の単一行クエリ)のどちらを実行するのが速いか、または優れているかです。もちろん、後者にはとが必要ですWHERE model = 'ABC'LIMIT 1

問題をより複雑に(そして包括的に)するために、他の影響を与える基準を考えてください。

  • 異なる数の行がターゲットにされた場合はどうなりますか:100または100,000?
  • 複数のテーブルが関係している場合はどうなりますか?以下のJOINedクエリの例を参照してください。

SELECT
    *
FROM
    `my_db`.`table1` AS `t1`
    INNER JOIN `my_db`.`table2` AS `t2` ON `t1`.`id` = `t2`.`fk`
    INNER JOIN `my_db`.`table3` AS `t3` ON `t2`.`id` = `t3`.`fk`
    /* Etc. */

この状況またはその状況でどちらの方法が優れているかを判断するための一般的な「経験則」はありますか?

4

1 に答える 1

2

SQLステートメントが適切に記述されている限り、1000レコードを含む1つの適切なステートメントは、1000クエリを実行するよりも常に効率的です。

于 2012-12-06T15:55:28.320 に答える