database - Oracle - 索引似乎不起作用。还是慢

标签 database performance indexing

甲骨文数据库: 我有一个包含 400000 行的表。 我为 field1 创建了一个索引。 以下查询仍然很慢(700 毫秒):

select field1, field2
from table
where 
field1 = '0903400110106156' or
field1 = '0903400110106160' or
field1 = '0903400110106190' or
field1 = '0903400110106471' or
field1 = '0903400110106480' or
field1 = '0903400110106494' or
field1 = '0903500110100001' or
field1 = '0903500110100012' or
field1 = '0903500110100021' or
field1 = '0903500110100031' or
field1 = '0903500110100039' or
field1 = '0903500110100047' or
field1 = '0903500110100050'

我删除了索引,但仍然有 700 毫秒。 我再次创建索引,但仍然需要 700 毫秒。 怎么了???

创建索引语句:

CREATE INDEX myindex
ON table (field1)

编辑:解释计划

PLAN_TABLE_OUTPUT

-----------------------------------------------------------------------
| Id  | Operation            |  Name          | Rows  | Bytes | Cost  |
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                |     4 |    60 |     2 |
|*  1 |  TABLE ACCESS FULL   | table          |     4 |    60 |     2 |
-----------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("table"."field1"='0901690339400674')

Note: cpu costing is off

EDIT2:好的,我对 2 个表进行了表分析。 table1 有速度问题。 table2 快很多(10 毫秒而不是 700 毫秒),尽管它的大小与 table1 相似。奇怪的速度问题!!!请帮助...

chk     Owner   Name    Partition   Subpartition    Tablespace  NumRows  Blocks  EmptyBlocks    AvgSpace    ChainCnt    AvgRowLen   AvgSpaceFLBlocks    NumFLBlocks UserStats   GlobalStats LastAnalyzed     SampleSize Monitoring  Status                            PartType      PartInfo     IsExternal
TRUE    user    table1                             tablespace  484627   6858    182            878         777         103                                         NO          NO          15/3/2011 18:34  125977     NO          Normal, Successful Completion                                FALSE
TRUE    user    table2                             tablespace  366159   6480    176            786         16565       130                                         NO          NO          15/3/2011 18:34  89657      NO          Normal, Successful Completion                                FALSE

最佳答案

与此同时,这个问题有点老了,但由于我现在遇到了同样的问题,而且没有答案对我有用,所以我认为这是正确的答案。创建索引后,使用以下语句告诉 Oracle 有一个新索引,它必须尽可能使用它。

ANALYZE TABLE <tablename> COMPUTE STATISTICS;

作为替代方案,您可以通过以下方式告诉 Oracle 在您创建新索引时立即计算统计信息:

CREATE INDEX myindex ON table (field1) COMPUTE STATISTICS;

关于database - Oracle - 索引似乎不起作用。还是慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313387/

相关文章:

php - 如何使用mysql查询在php中显示毫秒

mysql - 为什么索引占用的空间比我的 MySQL 表中的数据还要多?

performance - 什么更快;通过CSS border-radius生成5个小圆圈;或者使用重复 5 次的小圆圈 CSS Sprite ?

python - python中的列表索引比较

sql - 在 postgres 中的大表上按日期查询加快分组

PHP 数据库只输入最后一个值

C# 登录页面。 SQL 数据库路径

c++ - 加快大型案例陈述的方法? C++

performance - leader-follower算法的时间复杂度?

database - 存储倒排索引