JOIN 从根本上来说比 WHERE 更快吗?
比较从链接表检索数据的两个类似查询时,其中一个使用 WHERE 子句另一个使用 JOIN,问题就来了:是否有显着的性能区别?
数据库架构:
考虑以下数据库架构:
CREATE TABLE Document ( Id INT PRIMARY KEY, Name VARCHAR 255 ); CREATE TABLE DocumentStats ( Id INT PRIMARY KEY, DocumentId INT, -- foreign key to table Document NbViews INT );
查询比较:
要检索超过 500 个视图的文档,我们可以使用传统的 WHERE 子句或 JOIN 操作:
-- WHERE clause SELECT * FROM Document, DocumentStats WHERE DocumentStats.Id = Document.Id AND DocumentStats.NbViews > 500; -- JOIN operation SELECT * FROM Document INNER JOIN DocumentStats ON Document.Id = DocumentStats.Id WHERE DocumentStats.NbViews > 500;
理论等价:
理论上,两个查询应该产生相同的结果。数据库查询优化器旨在生成最佳执行计划,最大限度地减少执行时间,无论使用何种查询语法。
但是,在特定情况下,某些数据库引擎可能会为一个查询生成比另一个查询更有效的计划。对于复杂的查询或数据库配置,测试这两种方法可以揭示任何潜在的性能优势。
因此,虽然类似查询的 JOIN 和 WHERE 子句通常被认为是等效的,但始终建议在目标数据库系统上测试它们识别任何特定于数据库的优化或意外行为。
以上是对于相关表查询,JOIN 总是比 WHERE 子句更快吗?的详细内容。更多信息请关注PHP中文网其他相关文章!