我有一個表,它跟蹤時間安排的時間槽。這是一個「鎖」的記錄,以便2個用戶不會在同一個時間段預約約會。SQL當不使用索引
我們在生產中遇到了死鎖問題,我注意到這個表有5個索引。
這張表是經常讀取和寫入的,但它很少會有超過幾百行。
5個指標似乎對我來說過分殺傷。對於1000行以下的表格,我不認爲我需要任何索引。
我是否正確的假設?
TIA
我有一個表,它跟蹤時間安排的時間槽。這是一個「鎖」的記錄,以便2個用戶不會在同一個時間段預約約會。SQL當不使用索引
我們在生產中遇到了死鎖問題,我注意到這個表有5個索引。
這張表是經常讀取和寫入的,但它很少會有超過幾百行。
5個指標似乎對我來說過分殺傷。對於1000行以下的表格,我不認爲我需要任何索引。
我是否正確的假設?
TIA
快速經驗法則:在相對較小的表(通常少於100,000行)上刪除除主鍵上唯一索引以外的所有索引。
索引不影響鎖定。請注意,每個寫入操作也應該更改索引。它可能會有一些性能問題,但不應該影響鎖定。如果你的表只有1000行,你可以刪除你的索引。 log1000的迭代速度不會超過1000行迭代。
This table is read and written frequently but it would rarely have more than a few hundred rows it.
行鎖定是正常情況。僵局有時也會發生。您的數據庫提供程序是否處理死鎖?它應該自行釋放它。可能發生鎖定會導致您嘗試按順序更新A,B和B,A順序中的第二個事務更新行中的行。
此錶針對計劃資源使用應用程序級別鎖定。所以我有一個位置+日期時間的索引。如果有2個用戶在爭奪同樣的約會時間,並且有索引 - 我懷疑這可能是導致衝突的原因。我的感覺是,5個索引正在減慢寫操作的速度,足以導致更頻繁地發生可能的併發問題。 – sproketboy 2012-03-01 14:39:21
當然,使用5個索引的寫入操作比沒有索引的操作要慢。理論上,如果數據庫釋放鎖定,它可以減少死鎖的數量。但我不認爲這是真的。嘗試刪除索引並進行測試 – Anton 2012-03-01 15:29:56
死鎖問題與索引無關。小心分組和聚合函數。 – danihp 2012-03-01 14:07:49
「死鎖問題與索引無關」 - 不完全正確......「正確」索引通常會導致更少的阻塞... – 2012-03-01 14:09:05
@MitchWheat - 在什麼情況下索引會導致死鎖? – MatBailie 2012-03-01 14:13:55