我的场景是这样,根据游标的内容,执行一个表的更新操作,游标到下个表,执行这个表的更新。但每个表更新时间比较长,相互没有关联,我怎样实现并行操作呢?
fetch cur into @SourceDB --游标操作
while @@FETCH_STATUS = 0
--根据游标内容,生成sql语句
SET @Sql = ‘...’
--执行,时间较长,希望能够后台运行
EXECUTE (@Sql);
--移动游标
...
不能。
你只能在数据库外部,发起并行SQL调用,不能在一个SQL执行内部(包括存储过程),再次发起并行SQL,只能串行。
如果是Oracle的话
SQL语句可以在语句级别进行进行的,采用并行时Oracle在读取数据块的时候就会以多线程进行读取。
如果你是其他数据库的也可以取搜索一下看,我估计应该也会有。
下面的demo是通过提示开启并行读取
另外你也可以尝试在会话级强制开启并行DML或并行DDL来或并行查询来加快SQL的处理速度。
select /*+ parallel(aa 8)*/ * from table aa
```sql