mysql - 需要加快 WHERE NOT EXISTS 查询
问题描述
我相信这会导致 5 分钟到 20 分钟的延迟,具体取决于记录的数量。我需要将它翻译成 LEFT JOIN,但需要一些帮助才能实现它。
qry_arr = array(':bill_type' => "INT");
$sql = "update ".$billing_table." c set c.bill_type = :bill_type";
$sql .= " WHERE NOT EXISTS (SELECT s.abbreviation FROM state s WHERE s.abbreviation = c.out_location)";
$sql .= " and c.out_location != 'UNKNOWN' and c.out_location != ''";
解决方案
UPDATE $billing_table c
LEFT JOIN state s ON s.abbreviation = c.out_location
SET c.bill_type = :bill_type
WHERE s.abbreviation IS NULL
AND c.out_location NOT IN ('UNKNOWN', '')
SELECT
这与不匹配行的 a 语法基本相同。仅当值不存在时,请参见返回行。只需替换SELECT ... FROM
为UPDATE
,并在之前插入SET
子句WHERE
。
out_location
确保您在和上有索引abbreviation
。
推荐阅读
- node.js - 为新手解释异步等待代码块。为什么 user.password_hash 为空?
- kubernetes - 在部署 Kubernetes 资源时更改 Pulumi 的超时时间
- swiftui - 我们如何在 SwiftUI 中安全地解包数据?
- haskell - 如何实现一个最优的、纯功能的、双端优先级队列?
- c++ - 如何从 char* 函数返回指针
- mysql - 在 Mysql 中翻译 sql server 中使用的 Merge 语句
- go - 使用 bufio.NewScanner 逐行读取文件时的性能问题
- python - 如何使用 Python 从 SQLite 中的 n 个不同表中获取最后 n 条记录
- r - 从意义矩阵或手动显示紧凑型字母
- c# - ASP.NET - 我如何创建具有匿名类型的列表