私は語彙に絶望的であり、私自身の検索はどこにも行かないので、我慢してください。
ここで、ここで希望する方法で更新すると(GROUP_CONCATsもユーザー定義の変数に格納されている場合)、テーブル全体がロックされることを学びました。
これを行うための最良の方法は、デッドロックや競合、またはそれが呼ばれるものの可能性が低いと確信しているため、最も高いPK IDから始めて、降順で行ごとに行うことですUPDATE。CURSOR(私は語彙が悪かったとあなたに言いました)私が最新のレコードから始めれば。
UPDATEdである列にはインデックスがありません。
ここで、aTRIGGERがTRANSACTIONデフォルトであることがわかったので、代わりにprocを作成し、phpから呼び出します。
トランザクション分離レベルはREPEATABLE-READです。
私は、これらの重複UPDATEがデッドロックを引き起こし、完了するのに時間がかかること以外に何も起こらないことに関心があります。
すべてのテーブルInnoDB。
dであるテーブル内のすべてのIDを除いて、すべてSELECTのsとUPDATEsはPKid上でdです。参加しません。面倒なことはありません。難なく。 WHERECURSOR SELECTSELECTUPDATE
そうは言っても、ここに最後に質問があります:
DECLARE'は1回SELECTだけSELECTですか、それともループしますか(1回SELECTだけの方がいいです)?DECLARE'sSELECT'ロックはprocの期間中残りますか(できるだけ早く解放することをお勧めします)?- クエリが終了するとすぐに各
UPDATEリリースの行ロックが解除されますか、それともprocの期間中は保持されUPDATEますか(個々のクエリが終了した後に行ロックが解除されることをお勧めします)。 - ユーザー変数の
SELECTsも、設定後に解放されますか(ご想像のとおり、できるだけ早く解放することをお勧めします)。 SELECT行ロックを使用して行をdのままにすることは可能UPDATEですか(繰り返しますが、可能であれば私は好みます)?
よろしくお願いします!
なぜUPDATEすべてINSERT
私のウェブサイト(私のプロフィール)では、ユーザーが提出されたすべてのリンクにアクセスできるようにしています。これは順次問題ありません。IDを参照するだけです。
ただし、3つの投票タイプのカスタムアルゴリズムの組み合わせパーセンタイルでそれらをランク付けし、3を均等に重み付けします。
問題は、私のアルゴリズムでは、各投票が他のすべての投票に影響を与えることです。私のアルゴリズムの性質上、これを回避する方法はありません。
オンデマンド
PHPでそのルートを試しました。立ち入り禁止。計算が多すぎます。ページが自動的にユーザーのランクを更新し、ユーザーが賢くないので、ユーザーが正確なデータを即座に取得することにはあまり関心がありませんが、迅速な動的ページ付けを許可しているため、ユーザーを永遠に待たせることはできません。
ビューで計算することは、さらに大きな災害でした。