ddmx_addonarticle 的 templet (模板) 欄位隨機分配給 10 種模板$templates = ['tpl1','tpl2',...,'tpl10']; // 10 個模板
$total = count($templates);
for ($i = 0; $i < $total; $i++) {
$tpl = $templates[mt_rand(0, $total - 1)]; // 隨機取一個模板
$dsql->ExecuteNoneQuery(
"UPDATE `ddmx_addonarticle` SET `templet` = '$tpl' WHERE RIGHT(`aid`, 1) = '$i'"
);
}
| 維度 | 逐行 UPDATE | 尾碼分桶批量 UPDATE |
|---|---|---|
| SQL 執行次數 | N (行數) | 10 (固定,等於模板數) |
| 索引利用 | 主鍵點查 | 全表掃描 (但僅 10 次) |
| 網路往返 | N 次 | 10 次 |
| 事務開銷 | N 個隱式事務 | 10 個隱式事務 |
| 隨機度 | 完全隨機 | 按尾碼分布,近似均勻 |
-- 取尾 2 位 (00-99),共 100 桶,隨機抽取 30 個桶更新
UPDATE `ddmx_addonarticle` SET `templet` = 'tpl_x' WHERE RIGHT(`aid`, 2) IN ('01','07','13',...);
CRC32(id) % N 等 Hash 分桶-- MySQL 8.0+ 通用隨機分桶更新
UPDATE `articles`
SET `templet` = ELT(1 + (CRC32(`id`) % 10), 'tpl1','tpl2',...,'tpl10')
WHERE `status` = 'published';
CRC32 計算快、分布均勻,ELT 將 0-9 映射到模板陣列,單條 SQL 完成全表隨機分配,無需應用層循環。
「ID 尾碼分桶」是無需新增欄位、無需應用層循環、單條 SQL 批量更新的極簡技巧。配合 CRC32/MD5 Hash 可推廣至任意主鍵類型,是大量數據「偽隨機」屬性賦值的高效利器。