我拿到sql一看是update语句,想都没多想直接加并行,但是加了并行发现子查询根本没有用到并行,而且整体cost没有什么变化。我仔细想了想,这种写法oracle内部是通过单条跟新的方式进行,从p_t中那出一条记录去c_t中匹配,c_t中采用索引扫描,然后再通过rowid访问表取到name。所以优化器计算后,不会对子查询中的c_t应用并行,因为此时并行会采用全表扫描,效率肯定没有索引扫描快。语句和执行计划如下:
成都创新互联公司是一家专业提供孝昌企业网站建设,专注与成都网站制作、做网站、外贸营销网站建设、H5技术、小程序制作等业务。10年已为孝昌众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
update /*+parallel(p_t,4)*/ p_t set name=(select /*+parallel(c_t,4)*/ name from c_t where p_t.id=c_t.id) where p_t.name is null;
数据分表 分页获取 缓存 扩大服务器内存及CPU数量 也就这些了 没别的办法了 再就是做集群服务器 或者 CDN节点分发
SQLserver2000 数据库大小 1,048,516 TB
每个 SQL Server 实例的数据库个数 32,767
每个数据库的文件组个数 256
每个数据库的文件个数 32,767
文件大小(数据) 32 TB
文件大小(日志) 32 TB
理论上你的硬盘有多大,数据库就可以有多大(前提是你的操作系统能识别这些磁盘空间)