Mysql
哪個更快?游標循環中的多個更新查詢,還是單個查詢?
哪個更快?游標循環中的多個更新查詢,還是單個查詢?例如,在這種情況下,哪個更快?此查詢在觸發器中。
- 循環中的多個查詢
DECLARE done INT DEFAULT FALSE; DECLARE record_id INT; DECLARE cur CURSOR FOR SELECT id FROM table1 WHERE column = 0; OPEN cur; users_loop: LOOP FETCH cur INTO id; IF done THEN LEAVE users_loop; END IF; UPDATE table2 SET column = 0 WHERE id = id; END LOOP; CLOSE cur;
- 單一查詢
CREATE TEMPORARY TABLE tmp_table (id int(10)); INSERT INTO tmp_table SELECT id FROM table1 WHERE column = 0; UPDATE table2 SET column = 0 WHERE id IN(SELECT id FROM temp_table); DROP TABLE IF EXISTS tmp_table;
這取決於很多因素:
- 你的表定義
- 您的索引定義
- 你的事務隔離級別
- 您的一般數據庫負載
- 可用記憶體
- …
如果您有足夠的記憶體、處理器能力和臨時表空間,那麼您的第二條語句應該是最快的,但缺點是同時發生大量鎖定。
執行您的第一條語句可能會減少對所有其他使用者的鎖定,但這又取決於連接到數據庫的使用者的事務隔離級別。
如您所見,有許多因素會影響更新語句的執行。
如果沒有更多細節,我寧願使用第二個語句來提高速度,而您的第一個語句將在負載環境中使用。
這裡也問了一個類似的問題: