表T:
ID int 自增 pk
TITLE nvarchar(1800)
TIME datetime
ADDR nvarchar(900)另有一视图V:
CREATE VIEW T
AS SELECT * FROM T需求要定时(大概每10分钟)对T进行大容量导入数据,此时对视图V进行查询:
select * from V where id in (...)
会阻塞很长时间,直到导入完成为止。现在这种情况已经影响正常使用了。请问哪位高手有什么好的解决办法?
ID int 自增 pk
TITLE nvarchar(1800)
TIME datetime
ADDR nvarchar(900)另有一视图V:
CREATE VIEW T
AS SELECT * FROM T需求要定时(大概每10分钟)对T进行大容量导入数据,此时对视图V进行查询:
select * from V where id in (...)
会阻塞很长时间,直到导入完成为止。现在这种情况已经影响正常使用了。请问哪位高手有什么好的解决办法?
解决方案 »
- sql触发器插入远程数据库问题
- 求一SQL语句,请大家帮忙看看,谢谢!
- 数据库为何会增长这么快?大家帮忙!
- 综合取第一条记录的问题
- 数据库什么情况下会损坏?
- 如何求总?
- 因磁盘扇区错误导致数据库物理文件损坏,请问如何恢复?
- TT008请进来,我给你解释一下。
- 如何把一个sql server 2000的一个database的某些表全部表包括其中记录复制到sqlserver 2000的另一个database中?
- 给datetime数据类型的字段自动加入一个默认值是如何设置的???默认值设getdate()没用
- 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'Dot2fun' 中为标识列指定显式值。
- 如何用sql语句获得给登录用户授权的能访问的数据库,以及他们所在角色的列表?
2、加with (nolock)查询。
-->改为select *
from V as A
inner join () AS B on A.id=B.id
AS SELECT * FROM T with (nolock)
使用完整恢复模式时,所有由 bcp 执行的行插入操作都记录在事务日志中。如果数据量较大,会造成事物日志迅速写满。为了防止事务日志耗尽空间,当符合以下全部条件时,可以执行最小日志记录的大容量复制: 恢复模式是简单模式或大容量日志记录模式。
没有正在复制目标表。
目标表没有任何触发器。
目标表具有 0 行或没有索引。
指定了 TABLOCK 提示。有关更多信息,请参见控制锁定行为。
任何不满足上述条件的到 Microsoft® SQL Server™ 实例的大容量复制都将记入日志。在进行大容量复制操作前,如果在通常情况下使用完整恢复模式,则建议将恢复模式设置为大容量日志记录模式。这样可以防止大容量复制操作过多使用日志空间而可能写满日志。然而,即使使用大容量日志恢复模式,也将使用一些事务日志空间。可能需要在大容量复制操作期间创建事务日志备份以释放事务日志空间。当要将大量的行大容量复制到带有索引的表中时,可以通过删除所有索引,执行大容量复制,然后再重新创建索引来提高速度。有关更多信息,请参见优化大容量复制性能。说明 尽管在执行最小日志记录的大容量复制操作时,数据插入操作没有记录在事务日志中,但 SQL Server 仍会在每次为表分配新的扩展盘区时记录扩展盘区的分配。
=======SELECT查询语句默认情况下就是:with (nolock),又何改多此一举呢?楼主当然可以在查询语句(SELECT)中忽略lock,但问题还是解决不了的.
我是用bulk insert在程序中来做批量导入的。我希望能够实现批量导入基本不影响查询的效果。请问各位有什么好的建议?
因为ID是自增长的,而且查询的条件也是ID,所以可以建一个cluster索引,不知道效果如何,因为我这边没有环境。