Oracle 内存列存储没有改进 SELECT 查询?

Posted

技术标签:

【中文标题】Oracle 内存列存储没有改进 SELECT 查询?【英文标题】:Oracle in-memory column store is not improving SELECT query? 【发布时间】:2021-08-21 16:02:12 【问题描述】:

我有一个SELECT 声明

SELECT MIN(C_PRICE), MAX(C_PRICE)
FROM CAR;

我运行该语句并创建一个处理计划来查看成本。

-------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |     3 | 12150   (1)| 00:00:01 |
|   1 |  SORT AGGREGATE    |          |     1 |     3 |            |          |
|   2 |   TABLE ACCESS FULL|    CAR   |  1800K|  5273K| 12150   (1)| 00:00:01 |
-------------------------------------------------------------------------------

在将inmemory 的大小设置为200M 后,我为这个表car 创建了一个inmemory

ALTER TABLE CAR INMEMORY;

结果

----------------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |     3 | 12150   (1)| 00:00:01 |
|   1 |  SORT AGGREGATE             |          |     1 |     3 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL|    CAR   |  1800K|  5273K| 12150   (1)| 00:00:01 |
----------------------------------------------------------------------------------------

我的问题是为什么在将表更改为inmemory 后查询没有得到改进? SELECT 语句清楚地表明它正在通过inmemory 访问表。我认为创建inmemory 会改善查询处理从而降低成本?

【问题讨论】:

成本只是一个估计值,仅包含足以供 Oracle 确定最佳执行计划的信息。执行时间的实际差异是什么?如果你真的想让这个查询更快,你可以索引聚合列并将它分成两个标量子查询(一个做最小值,一个做最大值) @Sunny J - 您对 inmemory 列存储的总体体验如何,如果您可以分享,将会对我有很大帮助,我计划将它用于我的 OLAP 场景 【参考方案1】:

你应该看看两件事。一、表是否填充在 IM 列存储中(即 v$im_segments)?其次,两次查询之间的时间差是多少,花费的时间在哪里? SQL Monitor 活动报告非常适合确定这一点。

【讨论】:

以上是关于Oracle 内存列存储没有改进 SELECT 查询?的主要内容,如果未能解决你的问题,请参考以下文章

存储过程里面set赋值怎么没有起到作用

Oracle-常用表的查询增加列删除列修改列值功能增删改查

Oracle 12.1.0.2 New Feature翻译学习In-Memory column store内存列存储原创

请问如何从一列包含大小写字母、数字、汉字、全角字符的数据中只把由汉字组成的数据查出来,oracle 10g

oracle存储结构

oracle 中索引问题