gpt4 book ai didi

c# - 将 100 000 条记录从一个数据库插入到另一个数据库的最快方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 06:18:09 26 4
gpt4 key购买 nike

我有一个移动应用程序。我的客户有一个大数据集~100.000 条记录。它经常更新。当我们同步时,我们需要从一个数据库复制到另一个数据库。

我已将第二个数据库附加到主数据库,并运行 insert into table select * from sync.table

这非常慢,我认为大约需要 10 分钟。我注意到日志文件逐渐增加。

我怎样才能加快速度?

已编辑 1

我关闭了索引,关闭了日志。使用

insert into table select * from sync.table

还需要 10 分钟。

已编辑 2

如果我运行这样的查询

select id,invitem,invid,cost from inventory where itemtype = 1 
order by invitem limit 50

需要 15-20 秒。

表架构是:

CREATE TABLE inventory  
('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
'serverid' INTEGER NOT NULL DEFAULT 0,
'itemtype' INTEGER NOT NULL DEFAULT 0,
'invitem' VARCHAR,
'instock' FLOAT NOT NULL DEFAULT 0,
'cost' FLOAT NOT NULL DEFAULT 0,
'invid' VARCHAR,
'categoryid' INTEGER DEFAULT 0,
'pdacategoryid' INTEGER DEFAULT 0,
'notes' VARCHAR,
'threshold' INTEGER NOT NULL DEFAULT 0,
'ordered' INTEGER NOT NULL DEFAULT 0,
'supplier' VARCHAR,
'markup' FLOAT NOT NULL DEFAULT 0,
'taxfree' INTEGER NOT NULL DEFAULT 0,
'dirty' INTEGER NOT NULL DEFAULT 1,
'username' VARCHAR,
'version' INTEGER NOT NULL DEFAULT 15
)

索引的创建方式如下

CREATE INDEX idx_inventory_categoryid ON inventory (pdacategoryid);
CREATE INDEX idx_inventory_invitem ON inventory (invitem);
CREATE INDEX idx_inventory_itemtype ON inventory (itemtype);

我想知道,insert into ... select * from 不是进行海量数据复制最快的内置方式吗?

已编辑 3

SQLite 是无服务器的,所以请停止对特定答案进行投票,因为我确定那不是答案。

最佳答案

如果目标是某个版本的 MS SQL Server,SqlBulkCopy为大型数据集提供高效的插入,这类似于命令 bcp

您还可以在插入前禁用/删除非聚集索引,并在插入后重新创建它们。

在 SQLite 中,这些通常非常快:

.dump ?TABLE? ...      Dump the database in an SQL text format
.import FILE TABLE Import data from FILE into TABLE

也可以尝试:PRAGMA journal_mode = OFF

仅供引用,如果您将命令行实用程序包含在您的包中,您应该能够在 Windows Mobile 上运行它。

关于c# - 将 100 000 条记录从一个数据库插入到另一个数据库的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2124991/

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