您的位置:首页 > 数据库

数据库查询优化之用exists替换in,not exists替换not in

2017-11-06 16:59 615 查看
对于in和not要慎用,会导致全表扫描

用户表

CREATE TABLE USER(
id INT,
TIME DATETIME,
actuin VARCHAR(25)

);

插入数据

INSERT INTO USER VALUE(101,NOW(),'下单');

INSERT INTO USER VALUE(102,NOW(),'下单');

INSERT INTO USER VALUE(103,NOW(),'下单');

INSERT INTO USER VALUE(105,NOW(),'下单');

INSERT INTO USER VALUE(106,NOW(),'下单');

INSERT INTO USER VALUE(107,NOW(),'下单');

INSERT INTO USER VALUE(108,NOW(),'下单');

日活跃表

CREATE TABLE active(
id INT,
TIME DATETIME,
actuin VARCHAR(25)

);

INSERT INTO active VALUE(101,NOW(),'下单');

INSERT INTO active VALUE(102,NOW(),'下单');

INSERT INTO active VALUE(103,NOW(),'下单');

INSERT INTO active VALUE(105,NOW(),'下单');

INSERT INTO active VALUE(106,NOW(),'下单');

INSERT INTO active VALUE(107,NOW(),'下单');

INSERT INTO active VALUE(108,NOW(),'下单');

INSERT INTO active VALUE(998,NOW(),'下单');

INSERT INTO active VALUE(999,NOW(),'下单');

用户表是用户的信息,日活跃表包含老用户和新用户。

问题?

查询日活跃表中的新用户信息。

传统的not in查询

SELECT active.id,active.TIME FROM active WHERE id NOT IN(SELECT id FROM USER);

优化的sql,使用exists

SELECT active.id,active.TIME FROM active WHERE  NOT EXISTS(SELECT id FROM USER WHERE user.id=active.id);

EXISTS在SQL中的作用是:检验查询是否返回数据。当 where 后面的条件成立,则列出数据,否则为空。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: