为什么!=运算符比=运算符快?

我有一个 SQLite 数据库,我执行以下查询:

SELECT
    category,
    name,
    COUNT(side.id) as nb
FROM main
LEFT JOIN side
    ON main.id = side.id_main
WHERE category != 3
GROUP BY category, name;

此查询大约需要 0.3 秒并返回 8000 行。这是关联的查询计划:

id  parent  notused detail
7   0   0   SCAN TABLE main USING COVERING INDEX idx_main
19  0   0   SEARCH TABLE side USING AUTOMATIC COVERING INDEX (id_main=?)
id  parent  notused detail
7   0   0   SCAN TABLE main USING COVERING INDEX idx_main
19  0   0   SEARCH TABLE side USING AUTOMATIC COVERING INDEX (id_main=?)

现在,我只想选择一个类别。所以,我改写了我的WHERE条款是这样的:

这个查询现在需要大约 43 秒并返回 5000 行!长了100倍!这是关联的查询计划:

id  parent  notused detail
7   0   0   SEARCH TABLE main USING COVERING INDEX idx_main (category=?)
11  0   0   SCAN TABLE side
id  parent  notused detail
7   0   0   SEARCH TABLE main USING COVERING INDEX idx_main (category=?)
11  0   0   SCAN TABLE side

为什么等于运算符这么慢?我的查询有什么问题吗?


繁殖步骤:

  1. 创建以下表
SELECT
    category,
    name,
    COUNT(side.id) as nb
FROM main
LEFT JOIN side
    ON main.id = side.id_main
WHERE category = 1
GROUP BY category, name;
  1. 使用以下 Perl 脚本填充表
以上是为什么!=运算符比=运算符快?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>