0

被查询的表有数十亿条记录,并且选择查询的 where 子句基于非索引列。因此,普通的选择查询会进行全表扫描,因此需要更多时间。我正在尝试使用并行功能来查看它是否有助于缩短时间。但是想知道,如果并行对使用非索引列上的 where 子句的单个表上的 Select 查询真的有帮助吗?

例子 :

Select /*parallel(customer_data,4)*/ customer_id,name from customer_data where time_create >= :<min_time> AND customer_status='P'
4

1 回答 1

0

一般来说,为全表扫描的查询添加并行性会有所帮助。然而,总有一些事情需要考虑。

  1. 您的示例显示的是注释,而不是提示 - 您缺少 +(加号)符号,因此不会应用并行性。你应该有

    select /*+ parallel( customer_data, 4 ) */ customer_id, name...

  2. 将从您的表中检索多少行?这个问题的答案不是关于你可以在哪里使用并行,而是更多关于你是否应该

  3. 数据库服务器有多少 CPU 核心,存储提供多少 IO 带宽?并行性(通过设计)会消耗大量资源;并且通常可用的 IO 带宽量不足以支持高度并行性。一个非常粗略的经验法则是,每个 CPU 内核可以消耗 50 MB/s 到 200 MB/s
于 2017-02-11T06:00:44.103 回答