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