Jeff Atwood wrote once他发现在数据库中查询主键,然后使用IN子句获取所有相关字段的速度是其单个sql对应项的两倍。
我想知道这是否适用于所有情况,如果不适用,在哪些情况下,它仍然为性能方面的改进提供了很大的空间?
此外,通过脚本语言库访问数据库的成本有多高?我主要讲的是非常著名的PHP-MySQL组合。

最佳答案

杰夫·阿特伍德说的是SQL服务器,而不是MySQL。众所周知,SQL优化依赖于DBMS、配置、查询、数据和缓存状态。除了说只选择主键字段至少和选择整行一样快之外,很难泛化。当然,很难概括到任何有用的程度。你得把你的案子作为基准。
根据我使用MySQL的经验,如果使用IN查询选择细节比首先使用SELECT *更快,我会感到惊讶。我的理解是SELECT *SELECT id更昂贵,因为MySQL在这两种情况下都必须查找索引数据,但在前一种情况下必须执行额外的步骤来获取构成行其余部分的数据,这可能需要进一步的磁盘查找(特别是因为表数据不太可能在缓存中而不是索引中)。但是,对于InnoDB聚集索引(如果使用InnoDB,主键将是)有一种特殊情况,即数据与聚集索引中的索引项一起存储。在这种情况下,我相信SELECT *的速度与SELECT id几乎相同。

10-08 08:41
查看更多