use*_*250 2 performance index oracle query-performance
我有表(2139868 行):
COLUMN1 NUMBER(20,0)
COLUMN2 XMLTYPE
COLUMN3 XMLTYPE
COLUMN4 VARCHAR2(50 BYTE)
COLUMN5 VARCHAR2(50 BYTE)
COLUMN6 VARCHAR2(50 BYTE)
COLUMN7 VARCHAR2(50 BYTE)
COLUMN8 VARCHAR2(50 BYTE)
COLUMN9 VARCHAR2(500 BYTE)
COLUMN10 VARCHAR2(100 BYTE)
COLUMN11 VARCHAR2(50 BYTE)
COLUMN12 VARCHAR2(20 BYTE)
COLUMN13 VARCHAR2(20 BYTE)
COLUMN14 TIMESTAMP(6)
COLUMN15 VARCHAR2(50 BYTE)
COLUMN16 PROPERTIES_ARRAY_TYPE
COLUMN17 TIMESTAMP(6)
COLUMN18 TIMESTAMP(6)
Run Code Online (Sandbox Code Playgroud)
在数据库中
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
Run Code Online (Sandbox Code Playgroud)
我正在尝试选择 的所有不同值COLUMN4;不幸的COLUMN4是,尽管被索引,这大约需要 18 秒。只有5个独特的项目。
如何加快查询速度?
(工作不让我上传图片,所以我会打出执行计划,发挥你的想象力)
Operation OBJECT_NAME CARDINALITY COST
---------------------- ----------- ----------- ------
SELECT STATEMENT NIL 4 65463
+ HASH(UNIQUE) NIL 4 65463
++ TABLE ACCESS (FULL) TABLE1 2010857 65334
Run Code Online (Sandbox Code Playgroud)
如果我看到一个数据模型,其中一个表有 210 万行,其中一列只有 5 个不同的值,并且我知道人们希望定期获得这些不同值的列表,我会强烈怀疑数据模型缺少查找/维度表。与其尝试调整您当前的查询,我敢打赌,更好的答案是创建一个仅包含这 5 个不同值的单独表,在当前表和新查找表之间创建外键关系,然后修改您的查询改为命中新的查找表。
如果 Oracle 仅扫描索引,则无法确定该列中是否存在 NULL 行。所以它进行全表扫描。一种可能的解决方法:在 column4 上创建位图索引。此索引也包含 NULL 列。更多细节可以在这篇文章中找到为什么 oracle 不使用索引进行不同的查询?
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |