gpt4 book ai didi

mysql - 关于 WHERE 子句条件顺序的性能优势

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:55 25 4
gpt4 key购买 nike

考虑 3 个表(* 为主键,+ 为外键):

User {*id:INTEGER, name:VARCHAR(45)}
Flight {*id:INTEGER, service:VARCHAR(45), departureDate:DATETIME}
Reservation { +userId, +flightId }

数据:

用户:

User

航类:

Flight

预订:

Reservation

以下查询将获取 2013-05-06 旅行的乘客列表:

SELECT *
FROM user u, flight f, reservation r
WHERE u.id=f.id AND r.userid=u.id AND r.flightid=f.id AND f.departureDate='2013-05-06'

我的问题是:

  1. SQL 引擎如何处理 WHERE 子句?引用上面的查询,是否会先通过r.userid=u.id组合r和f形成临时数据表T1,然后通过r.flightid=f.id组合T1和f的另一个临时表T2,最后过滤departmentData在 T2?

  2. 如果子句更改为:WHERE f.departureDate='2013-05-06' AND u.id=f.id AND r.userid=u.id,性能会有变化吗AND r.flightid=f.id 在这种情况下 f.departureDate='2013-05-06' 将减少行以形成临时表?

最佳答案

1) 不,顺序并不重要。这都是关于数据库引擎的。数据库引擎可以做出明智的选择,比如先执行基本命令,然后再执行其他复杂命令。所以不要考虑重新排序语句,查询优化器会为你做这件事。只是举一个基本的例子来说明查询优化器所做的是转换语句:

(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)

B=5 OR B=6

2)同样,不会有任何区别。

没有关于 MySql 查询优化器功能的完整列表,但您可以找到其中的一些 here

关于mysql - 关于 WHERE 子句条件顺序的性能优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398256/

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