我正在尝试加快几年前为雇主的购买授权应用程序编写的一些代码的速度。基本上我有一个慢子查询,我想用 JOIN 替换它(如果它更快)。
当主管登录应用程序时,他会看到他尚未授权或拒绝的购买请求列表。该列表是通过以下查询生成的:
SELECT * FROM SA_ORDER WHERE ORDER_ID NOT IN
(SELECT ORDER_ID FROM SA_SIGNATURES WHERE TYPE = 'administrative director');
sa_order 中只有大约 900 条记录,sa_signature 中只有大约 1800 条记录,并且该查询仍然需要大约 5 秒的时间来执行。我尝试使用 LEFT JOIN 来检索我需要的记录,但我只能获取 sa_order 记录,在 sa_signature 中没有匹配记录,并且我需要 sa_order 记录“没有与‘行政主管’类型匹配的记录” ”。非常感谢您的帮助!
两个表的架构如下:
涉及的表具有以下布局:
CREATE TABLE sa_order
(
`order_id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`order_number` BIGINT NOT NULL,
`submit_date` DATE NOT NULL,
`vendor_id` BIGINT NOT NULL,
`DENIED` BOOLEAN NOT NULL DEFAULT FALSE,
`MEMO` MEDIUMTEXT,
`year_id` BIGINT NOT NULL,
`advisor` VARCHAR(255) NOT NULL,
`deleted` BOOLEAN NOT NULL DEFAULT FALSE
);
CREATE TABLE sa_signature
(
`signature_id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`order_id` BIGINT NOT NULL,
`signature` VARCHAR(255) NOT NULL,
`proxy` BOOLEAN NOT NULL DEFAULT FALSE,
`timestamp` TIMESTAMP NOT NULL DEFAULT NOW(),
`username` VARCHAR(255) NOT NULL,
`type` VARCHAR(255) NOT NULL
);