gpt4 book ai didi

sql - UNION 子查询的奇怪行为,为什么?

转载 作者:行者123 更新时间:2023-11-29 13:35:26 24 4
gpt4 key购买 nike

下面两个查询返回相同的信息;但是,第一个需要 1.1 秒才能完成,第二个需要 0.06 秒

此表有198,810 条记录"Contacts"."ReqID" 已编入索引。

  1. 为什么(看似)不那么复杂的查询会导致性能下降?
  2. 为什么 UNION 子查询会加速这个过程?

*编辑*

我快速连续地运行了这两个查询,没有发现性能有任何变化。


查询 1

SELECT
"Contacts"."ContactID",
"Contacts"."ReqID"
FROM
"Contacts"
WHERE
"Contacts"."ReqID" = 2426;

*编辑*

解释分析

Index Scan using "Contacts_ReqID_idx" on "Contacts"  (cost=0.00..30.08 rows=11 width=78) (actual time=0.076..0.115 rows=14 loops=1)
Index Cond: ("ReqID" = 2426)
Total runtime: 0.159 ms

1.1 秒返回14 条记录


查询2

SELECT
"T1"."ContactID",
"T1"."ReqID"
FROM
(
SELECT
"Contacts"."ContactID",
"Contacts"."ReqID"
FROM
"Contacts"
WHERE
"Contacts"."ReqID" = 2426
UNION
SELECT
"Contacts"."ContactID",
"Contacts"."ReqID"
FROM
"Contacts"
WHERE
"Contacts"."ReqID" = 2426
) AS "T1"
ORDER BY
"ReqID"

*编辑*

解释分析

Sort (cost=61.74..61.80 rows=22 width=100) (actual time=0.313..0.329 rows=14 loops=1)
Sort Key: "Contacts"."ReqID"
Sort Method: quicksort Memory: 26kB
-> HashAggregate (cost=60.81..61.03 rows=22 width=78) (actual time=0.266..0.285 rows=14 loops=1)
-> Append (cost=0.00..60.37 rows=22 width=78) (actual time=0.063..0.201 rows=28 loops=1)
-> Index Scan using "Contacts_ReqID_idx" on "Contacts" (cost=0.00..30.08 rows=11 width=78) (actual time=0.059..0.106 rows=14 loops=1)
Index Cond: ("ReqID" = 2426)
-> Index Scan using "Contacts_ReqID_idx" on "Contacts" (cost=0.00..30.08 rows=11 width=78) (actual time=0.006..0.024 rows=14 loops=1)
Index Cond: ("ReqID" = 2426)
Total runtime: 0.410 ms

0.06 秒返回14 条记录

最佳答案

事实证明 Navicat(我用来访问和管理我的数据库的软件)正在运行一些额外的代码,允许在运行简单的 SELECT * FROM [Table] 时就地编辑数据陈述。以下是我从支持代表那里收到的电子邮件。


Dear [Navicat User],

Thanks for your email. Please note that in order to get column information and allow update data afterwards, Navicat will run extra SQL when the query is a simple SELECT query. Using UNION, Navicat not allows user update any data in the query result.

...

Sincerely,
Mayho Ho
Navicat Support Center

关于sql - UNION 子查询的奇怪行为,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955828/

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