我需要插入大量数据(百万美元),我需要快速执行它。 我在.NET和JAVA上阅读了关于通过ODBC进行批量插入但我需要直接在数据库上执行它。
我也读过批量插入,但我尝试过的东西似乎没有用 Batch Insert,Example
我正在执行一个INSERT SELECT,但它每行需要0.360秒,这非常慢,我需要在这里进行一些改进。
如果可能的话,我真的很感谢这里的一些指导和示例和文档。
数据库:SYBASE ASE 15.7
答案 0 :(得分:1)
扩展一些评论...
master..monProcessWaits
表(where SPID = spid_of_your_insert_update_process
)确定[参见P& ; T监控表手册(又名MDA表)] master..monProcessObject
和master..monProcessStatement
将显示当前正在运行的查询的逻辑/物理IO [再次参见MDA表的P& T手册] master..monSysStatement
将显示最近已完成查询的逻辑/物理IO [再次,请参阅MDA表的P& T手册] UPDATE
语句,您需要查看查询计划,看看您是否遇到了糟糕的加入顺序;同样重要的是...... direct
(快/好)更新与deferred
(慢/坏)更新; deferred
更新可能由于多种原因而发生...一些可修复,一些不...更新索引列,不良连接顺序,导致页面拆分和/或行转发的更新sp_helpconstraint table_name
查看RI(PK / FK)约束;查询计划还将显示在插入/更新/删除期间执行RI(PK / FK)验证时所需的底层连接sp_helptrigger
直到ASE 16才出现);检查sysobjects.[ins|upd|del]trig where name = your_table
- 这些表示表中任何插入/更新/删除触发器的对象ID;还检查sysobjects
记录,其中type = 'TR' and deltrig = object_id(your_table)
- 提供对其他插入/更新/删除触发器的支持(如果这只是ASE 16 +,请不要记得)inserted
和deleted
表(如果引用)正在驱动这些伪表与永久表连接的任何查询< / LI>
我可能会忘记一些领域(在我的脑海中)......关键的一点就是“缓慢的”DML语句可能有很多原因。
一种(相对)快速的方法来确定RI(PK / FK)约束或触发器是否在起作用......
set showplan on
go
insert/update/delete statements
go
然后查看生成的查询计划;如果您看到除了insert / update / delete语句中明确列出的表之外的任何表的引用,那么您可能正在处理RI约束和/或触发器。