sql >> データベース >  >> RDS >> Mysql

MySQL InnoDB SELECT ... LIMIT 1 FOR UPDATE Vs UPDATE ... LIMIT 1

    答えが得られなかったので、ベンチマークを始めました。私の基準は次のとおりです:

    • 20,000個の事前生成されたコード
    • Apache abの使用 20,000リクエスト、100同時実行のコマンド:ab -n 20000 -c 100
    • サーブレット->EJB(JPA 2.0 EclipseLink、JTA)を使用して、DBで更新を実行します(実際の状況ではJSFアクションを介して実行されるため)
    • サーブレットの2つのバージョン。1つはオプション1(SELECT ... FOR UPDATE)、もう1つはオプション2(UPDATE ... LIMIT 1)
    • Glassfishを停止し、テストしたサーブレットを手動で5回ヒットしてウォームアップし、すべてをNULLにリセットしてuser_idにします
    • テストはそれぞれ3回実行され、平均が提供されます

    結果:

    SELECT ... FOR UPDATE;更新...:

    Concurrency Level:      100
    Time taken for tests:   758.116 seconds
    Complete requests:      20000
    Failed requests:        0
    Write errors:           0
    Row updated:            20000
    

    更新....制限1:

    Concurrency Level:      100
    Time taken for tests:   773.659 seconds
    Complete requests:      20000
    Failed requests:        0
    Write errors:           0
    Row updated:            20000
    

    したがって、少なくとも私のシステムでは、2つのクエリを使用するオプションの方が1つのクエリよりも効率的であるように思われます。私はそれを予期していませんでした:)




    1. PHPテーブル(日付)有効性に基づく動的な色の変更

    2. データベースからランダムオーディオを継続的にストリーミング

    3. MySQLで改行とキャリッジリターン(\ r \ n)を見つける

    4. PostgreSQL DATEADD()と同等