将在where子句中为非索引列选择并行查询帮助吗?

时间:2016-05-29 05:24:00

标签: sql indexing query-optimization database-tuning

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

示例:

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

1 个答案:

答案 0 :(得分:0)

通常,将并行性添加到全表扫描的查询中会有所帮助。但总有一些事情需要考虑。

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

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

  2. 从表中检索多少行?这个问题的答案不是关于你可以使用并行性的地方,而是关于你

  3. 的更多信息
  4. 数据库服务器有多少CPU核心以及存储提供多少IO带宽?并行(按设计)可以消耗大量资源;通常,可用的IO带宽量不足以支持高度的并行性。一个非常粗略的经验法则是每个CPU内核可以消耗50 MB / s到200 MB / s