我通过分析正采取多一点时间预期,我想调整它的一些下面的查询。查询的目的是从给定的device_id的Messages表中获取最后3小时的数据,并通过上次消息接收(time desc)对结果进行排序。目前数据库上有一个复合索引,看起来并不理想。任何索引或查询语法都会更改建议以加快此查询的速度?性能调优Oracle查询
消息表结构:
色谱柱:
id (auto incremented PK NUMBER(10))
device_id
model_id
state
creation_date (DATE when row was inserted)
time (unix time message was transmitted)
//a bunch of other columns omitted
索引:
id
device_id, model_id, state (composite index)
查询:
select * from messages where device_id='0-12345678' and creation_date > sysdate-3/24 order by time desc
什么是查询计划?什么是综合指数?它是'device_id,creation_date'上的组合索引吗?此查询返回多少行?它运行得有多快?你需要多久才能运行? –
'messages'表中有多少行? 'device_id'有多独特?你根据没有被索引的列选择数据('device_id','creation_date'),难怪查询很慢。 – npe
消息表有6,354,837行。 Device_id可以具有多个关联的消息,因此在该表中它不是唯一的。我没有创建索引,这就是我问的原因。我相信索引应该改变 – c12