gpt4 book ai didi

ms-access - 为什么在 Microsoft Access DB 中 Select * 比 Select Top 1 更快

转载 作者:行者123 更新时间:2023-12-03 07:00:17 25 4
gpt4 key购买 nike

我尝试让这个示例尽可能容易地重现。我在 MS Access 中有一个大约有 425,000 行的表。当我再次执行以下查询时,该表大约需要 10 秒才能执行:

SELECT TOP 1 BlockID FROM AvailabilityBlocks ORDER BY BlockID;

“BlockID”字段是主键并已建立索引。

但是当我运行以下查询时,它会在不到 2 秒的时间内返回:

SELECT BlockID FROM AvailabilityBlocks ORDER BY BlockID;

我尝试过重建索引,甚至进行了压缩和修复,但都没有效果。

任何帮助或见解将不胜感激!

最佳答案

当扩展您的实验时,您会以更多方式看到 MS-Access 的此类行为。

这里在一个包含 400 万行的 MS-Access 数据库中重现了观察结果,该数据库用于将 CSV 导入传输到 SQL 服务器。

当选择具有排序顺序的所有未索引字段时,MS-Access 需要 3 分钟才能执行。当选择所有索引字段时,需要一瞬间的时间。当选择索引字段的TOP 1时,又需要3分钟,这证明该函数没有使用可用的索引。作弊 (SELECT TOP 1 BLOCKID FROM (SELECT BlockID FROM AvailabilityBlocks ORDER BY BlockID) 也不使用索引,也需要 3 分钟。

我的解释是,MS-Access 具有 native “喷气引擎”功能,这对于某些用途来说是可以接受的(我仍然在一些轻量级网站上使用 MS-Access)。 “喷气引擎”支持可视化查询设计屏幕的所有功能。从 Office 2007 开始,添加了另一层功能以使 SQL 语言与 T-SQL 兼容。

“TOP 1”语句是这些"new"函数之一。如您所见,视觉设计中不支持它。很明显,创建此函数不是为了利用现有索引。

您可以在“Access 选项”->“对象设计”->“查询设计”->“与 SQL Server 的兼容性 (ANSI 92)”中将代码限制为喷射引擎功能。

保护 MS-Access 投资的另一个选择是将数据迁移到 ODBC 数据库(MYSQL、SQL 服务器、Oracle ...)并仅使用 MS-Access 作为前端。然后,带有“top 1”的 View 可以由更优化的引擎呈现。

关于ms-access - 为什么在 Microsoft Access DB 中 Select * 比 Select Top 1 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834282/

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