【问题标题】:How to optimize the performance of a table without any primary keys, unique keys or foreign keys?如何优化没有任何主键、唯一键或外键的表的性能?
【发布时间】:2016-05-22 06:27:54
【问题描述】:

我有一张表格,可以在一天内保存多辆车的 GPS 位置。所以它有多个 ID、一些关于位置的信息、一些其他信息和日期(时间戳日期+时间)。

描述表名;

    DESCRIBE TABLE_NAME;

    Name        Null     Type           
    ----------- -------- -------------- 
    ID_1        NOT NULL NUMBER(38)     
    ID_2        NOT NULL VARCHAR2(12)   
    ID_3        NOT NULL VARCHAR2(12)   
    ID_4        NOT NULL VARCHAR2(12)   
    INFO_1      NOT NULL NUMBER(38)     
    LAT         NOT NULL FLOAT(126)     
    LNG         NOT NULL FLOAT(126)     
    DATE        NOT NULL TIMESTAMP(6)   
    INFO_2      NOT NULL NUMBER(38)     
    INFO_3      NOT NULL NUMBER(38)     
    INFO_4      NOT NULL NUMBER(38)     
    INFO_5      NOT NULL NUMBER(38)     
    INFO_6      NOT NULL NUMBER(38)     
    INFO_7      NOT NULL NUMBER(38)     
    TEXTMSG              VARCHAR2(4000) 

所以,我必须像这样运行相同的查询来指示不同的 TIME:

    SELECT 
    to_char(ID_1) as ID_1,
    ID_2,
    ID_4,
    to_char(INFO_1) as INFO_1,
    substr(LAT, 1, 32767) as LAT,
    substr(LNG, 1, 32767) as LNG,
    to_char(DATE,'dd/MM/yy HH24:MI:SS') as DATE,
    to_char(INFO_2) as INFO_2,
    to_char(INFO_3) as INFO_3,
    to_char(INFO_4) as INFO_4,
    to_char(INFO_5) as INFO_5,
    to_char(INFO_6) as INFO_6,
    to_char(INFO_7) as INFO_7,
    TEXTMSG 
    FROM TABLE_NAME
    WHERE to_char(DATE, 'hh24:mi:ss') = '09:10:25';

此查询始终需要大约 25 秒。 表上大约有 100 万条记录。

需要的时间(25秒)正常吗?
这次如何改进?

我尝试做如下索引,但没有任何改变:

CREATE INDEX INDEX_TABLE_NAME ON TABLE_NAME (DATE);

注意:我使用的是 Oracle Database 11g Enterprise Edition 11.2.0.1.0 64bit(在 Windows 上,仅用于测试目的)

【问题讨论】:

  • 推理花费的秒数可能不是最好的方法,取决于太多的事情;如果您可以发布两个查询的解释计划(有和没有索引),那将很有用

标签: sql oracle indexing oracle11g


【解决方案1】:

您想加快查询速度,然后使用表达式索引:

create index idx_tablename_exp on table_name(to_char(DATE, 'hh24:mi:ss'))

然后,Oracle 将能够将此索引用于您的 where 子句。

【讨论】:

    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 2014-08-04
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多