加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

ms-access – 为什么Select * Faster比Microsoft Access DB中的S

发布时间:2020-12-14 02:21:04 所属栏目:Windows 来源:网络整理
导读:我试图让这个样本尽可能简单地重现.我在MS Access中有一个表,大约有425,000行.当我再次执行以下查询时,表执行大约需要10秒钟: SELECT TOP 1 BlockID FROM AvailabilityBlocks ORDER BY BlockID; “BlockID”字段是主键并被索引. 但是当我运行以下查询时,它
我试图让这个样本尽可能简单地重现.我在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的这种行为.

此处的观察结果在一个4百万行的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具有原生的“喷气引擎”功能,可以接受某些用途(我仍然在一些轻量级网站上使用MS-Access). ‘jet引擎’支持视觉查询设计屏幕的所有功能.从Office 2007开始,添加了另一层功能,以使SQL语言与T-SQL兼容.

‘TOP 1’语句是其中一个’新’函数.如您所见,视觉设计不支持它.很明显,没有创建此函数来使用现有索引.

您可以在“Access for options”中将代码限制为喷气引擎功能 – > ‘为对象设计’ – > ‘查询设计’ – > ‘与SQL服务器的兼容性(ANSI 92).

保护您在MS-Access中投资的另一个选择是将数据迁移到ODBC数据库(MYSQL,SQL服务器,Oracle …),并仅将MS-Access用作前端.然后可以通过更优化的引擎呈现具有“顶部1”的视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读