我已经为9个表创建了使用INNER JOIN的SQL命令,无论如何这个命令需要很长时间(超过五分钟).因此,我的民众建议我将INNER JOIN更改为LEFT JOIN因为LEFT JOIN的表现更好,尽管我所知道的第一次.我改变后,查询的速度显着提高.
我想知道为什么LEFT JOIN比INNER JOIN快?
我的SQL命令如下所示:
SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D依此类推
更新: 这是我的架构的简要说明.
FROM sidisaleshdrmly a -- NOT HAVE PK AND FK
INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK
ON a.CompanyCd = b.CompanyCd
AND a.SPRNo = b.SPRNo
AND a.SuffixNo = b.SuffixNo
AND a.dnno = b.dnno
INNER JOIN exFSlipDet h -- PK = CompanyCd, FSlipNo, FSlipSuffix, FSlipLine
ON a.CompanyCd …Run Code Online (Sandbox Code Playgroud) 我正在构建Ruby on Rails 2.3.5应用程序.默认情况下,Ruby on Rails不提供外键约束,因此我必须手动完成.我想知道引入外键是否会降低数据库端的查询性能,使其不值得做.在这种情况下的性能是我的首要任务,因为我可以检查数据与代码的一致性.你一般的建议是什么?你推荐使用外键吗?你怎么建议我应该测量这个?
我遇到过与FK和Web应用程序有关的讨论.基本上有些人说Web应用程序中的FK并不代表真正的改进,甚至可能在某些情况下使应用程序变慢.
你们有什么想法,你的经历是什么?
编辑:请注意,我知道FK的工作和目标,我只是不确定它们是否会对像youtube等网络应用程序的性能产生重大负面影响.
-
InnoDB引擎创始人,Innobase创始人兼首席执行官Heikki Tuuri的引述:
一旦更新了行,InnoDB就会检查外键,不会执行批处理或检查延迟到事务提交外键通常是严重的性能开销,但有助于保持数据的一致性
外键增加了行级锁定的数量,并且可以使它扩展到除了直接更新的表之外的许多表
一位同事声称他过去使用外键来优化查询.我认为仅在插入或更新表中的数据时才使用外键.我不知道它们如何用于加速搜索.
外键如何在创建执行计划时提供帮助?我错过了什么吗?如果是这样,那么它在什么情况下有帮助?
(我们使用PostgreSQL,我没有太多的经验.它有可能与Oracle或MySQL的行为不同吗?)
可能重复:
外键是否提高了查询性能?
我正在处理没有关系的表(但数据是相关的).我在这些表之间抛出JOIN查询.如果我添加关系,它会提高性能吗?(PS -I将在未来添加关系以保持数据完整性,现在我正在努力提高性能.感谢您的帮助.)