gpt4 book ai didi

sql - 如果根据 EXPLAIN QUERY PLAN 它应该是相反的,为什么一个 SQL 查询比另一个慢?

转载 作者:行者123 更新时间:2023-12-03 18:25:03 26 4
gpt4 key购买 nike

我有两张 table

CREATE TABLE Categories (
Category INTEGER,
Id INTEGER,
FOREIGN KEY (Category) REFERENCES CategoriesInfo(Category)
)
CREATE TABLE 'CategoriesInfo' (
'Category' INTEGER PRIMARY KEY NOT NULL,
'Name' TEXT
)

带索引
CREATE UNIQUE INDEX idxCategory ON Categories (Category, Id)

如果我跑
EXPLAIN QUERY PLAN
SELECT CategoriesInfo.Category, Name
FROM Categories, CategoriesInfo
Where Categories.Category=CategoriesInfo.Category AND Id=:id
ORDER BY Name

它说
Array
(
[0] => Array
(
[selectid] => 0
[order] => 0
[from] => 1
[detail] => SCAN TABLE CategoriesInfo (~1475 rows)
)

[1] => Array
(
[selectid] => 0
[order] => 1
[from] => 0
[detail] => SEARCH TABLE Categories USING COVERING INDEX idxCategory (Category=? AND Id=?) (~1 rows)
)

[2] => Array
(
[selectid] => 0
[order] => 0
[from] => 0
[detail] => USE TEMP B-TREE FOR ORDER BY
)

)

但是如果我使用连接
EXPLAIN QUERY PLAN
SELECT CategoriesInfo.Category, CategoriesInfo.Name
FROM Categories
LEFT JOIN CategoriesInfo ON (Categories.Category=CategoriesInfo.Category)
WHERE Categories.Id=:id
ORDER BY Name

我明白了
Array
(
[0] => Array
(
[selectid] => 0
[order] => 0
[from] => 0
[detail] => SEARCH TABLE Categories USING AUTOMATIC COVERING INDEX (Id=?) (~6 rows)
)

[1] => Array
(
[selectid] => 0
[order] => 1
[from] => 1
[detail] => SEARCH TABLE CategoriesInfo USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
)

[2] => Array
(
[selectid] => 0
[order] => 0
[from] => 0
[detail] => USE TEMP B-TREE FOR ORDER BY
)

)

然后,使用连接应该更快。但是当我用 phpliteadmin 运行这两个代码时,
  • 第一个需要 0 秒
  • 第二次耗时 0.3281 秒

  • 为什么??

    最佳答案

    我会指出这两个查询是不等价的。

    您的第一个查询有效地执行了 INNER JOIN,而您的第二个查询是 LEFT JOIN。我敢打赌这是速度差异的原因。您的 LEFT JOIN 将要求输出中包含类别中的所有记录,这是您的第一个查询不需要的。

    尝试将 LEFT JOIN 更改为 INNER JOIN,然后比较速度。

    关于sql - 如果根据 EXPLAIN QUERY PLAN 它应该是相反的,为什么一个 SQL 查询比另一个慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735867/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com