【发布时间】: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