目前,我們有一個票務管理系統,就像所有票務系統一樣,它需要以循環方式將情況分配給座席。同時,代理可以應用自己的過濾邏輯並在其隊列中工作。MySql邏輯優化
問題,
- 表與門票現在是非常大的,跨越超過1000萬行。
- 一張票不應該分配給兩個不同的用戶。
- 爲了解決上述問題,這是我們擁有的流量,
- 選擇查詢與過濾條件解僱,限制0,1
- 上述查詢返回的行然後可以將選定基於ID和鎖定更新。
- 最後我們開始更新,說用戶X選擇了這個案例。
- 雖然第3步執行其他用戶無法獲得相同的情況下鎖,所以他們發射3.查詢可能會多次獲取下一個可用的情況。
- 隨着用戶數量的增加,在步驟4中這個時間越來越高。
我們嘗試在第4步本身的查詢中進行select更新,但它使整個查詢變慢。假設這是因爲select查詢中有大量的行。
問題,
- 是否有不同的方法,我們需要完全承擔?
- 會在存儲過程中進行選擇和更新以確保與選擇更新然後更新相同的結果?
P.S - 我問了同樣的問題stackexchange。
是否需要鎖定該行。你也可以在沒有鎖的情況下執行它:通過SELECT讀取一行並獲得舊用戶,並在UPDATE處添加條件WHERE ... AND user = old_user。所以如果更新一行,那麼所有其他進程都可以獲得這張票 –