javascript - 为什么mssql会占用这么多内存,耗时这么久?
问题描述
我一直在使用 nodejs 使用 mssql npm 包,并注意到性能比在 SSMS 中运行相同的查询要慢得多。
这方面的一个例子是一个简单的查询select * from contacts
。在给定的表中,大约有 38000 行和 14 列。运行此查询会导致节点进程内存使用量猛增至 2GB 左右,并需要 30 多秒,最终因堆错误而崩溃。SSMS 中的相同查询需要两秒钟,并且内存使用率保持在较低水平。
我试图了解两者之间的区别。我知道 SSMS 是一个完整的软件产品,但是,我希望两者之间的性能相似。
任何人都可能拥有的任何见解将不胜感激,下面是我为测试查询时间而创建的示例代码。
我尝试过使用流方法,结果与他们的 npm 包页面上列出的用于从数据库中检索结果的其他一些方法相同。
var express = require('express');
const mssql = require('mssql');
var app = express();
const config = {
user: 'XXX',
password: 'XXX',
server: 'XXX',
database: 'XXX',
pool: {
max: 10,
min: 5,
idleTimeoutMillis: 30000
}
}
var query = 'SELECT * FROM contacts'
app.get('/query', async function () {
var connection = await mssql.connect(config);
var result = await mssql.query(query)
await mssql.close()
console.log(result)
});
app.listen(process.env.PORT || 6000);
预期结果:低内存使用和快速查询返回时间
实际结果:高内存使用和长查询时间
解决方案
推荐阅读
- laravel - laravel 中的数据加密和解密
- reactjs - 使用 React Router 确定 ReactApp URL 搜索
- rollupjs - 使用汇总保留独立评论
- android - Android 布局足球场与球员
- html - 尝试使用带有正文解析器的 Node/Express 从前端检索数据但失败
- android-emulator - 在 xamarin Visual Studio 2019 上运行 android 模拟器显示透明屏幕
- b-tree - 为什么要搜索的单个节点的时间复杂度是 O(1) 而不是 O(logn)?
- postgresql - 在 ALTER TABLE ALTER COLUMN 的 USING 子句中使用 SELECT?
- typescript - 打字稿文件的编译问题
- android - 在 Android 10 设备中,生物识别提示一直在锁定屏幕顶部失败并显示 ERROR_CANCELED