1. 字段自減
UPDATE `table_name` SET `total`=IF(`total` < 1, 0, `total`-1) WHERE `id` = 1;
一般在做字段減法的時候我們需要在外部判斷一次數值
這樣可以省去一次外部數值判斷的查詢,也可以防止無符號字段 total 為0時 數值溢出,將變成最大值或者報錯的情況
2. UPDATE 的 SET 使用子查詢數據
UPDATE `bz_xs_chapter` AS c, (SELECT COUNT(*) AS total FROM `bz_xs_chapter` WHERE `bookId` = 22042) AS c1, (SELECT COUNT(*) AS total FROM `bz_xs_tome` WHERE `bookId` = 22372) AS c2 SET `c`.`name`=`c1`.`total`, `c`.`words`=`c2`.`total` WHERE `c`.`id` = 2889820
這樣可以通過子查詢一次更新多個字段值,效率要高很多了吧
3. COUNT(*)效率高
之前看過許多相關帖子,有的說使用 COUNT(id) 效率高,各說各的看起來都有理,但自己測試:
270W數據,350MB大小數據表,COUNT(*) 比 COUNT(id) 速度快了至少 10 倍 甚至 100 倍