2014-05-13 163 views
1

我表中的一列中的数据类型为TIMESTAMP。我想用timestamp列从表格中获取最新的记录。表格中的记录可能会在几百到几百万之间变化。该查询目前看起来像这样。SQL返回最新记录

SELECT alarm_severity_id 
FROM alarm_notification 
WHERE alarm_life_cycle_id = 25 
ORDER BY event_timestamp DESC 
LIMIT 1; 

由于表中的记录数,我怀疑查询可能需要相当多的时间(根据记录)。当然,我可以在event_timestamp列上添加一个索引来提高性能。但是,我很想知道这是否是获得结果的最佳查询。或者是否有其他正确的方法来做到这一点。

+0

您正朝着正确的方向前进。我认为这是做到这一点的最佳方式。创建一个索引并获取最大时间戳。 – Egalitarian

+0

@平等Thnx。但我期待像MAX功能这样的功能可以为我效力。对数据进行排序然后将结果限制为1似乎是对我的一种解决方法。 –

回答

1

你可以尝试找出最大时间戳然后相应alarm_severity_id

select alarm_severity_id 
    from alarm_notification 
where (alarm_life_cycle_id = 25) and 
     (event_timestamp in 
      (select Max(event_timestamp) 
      from alarm_notification 
      where alarm_life_cycle_id = 25)) 
limit 1 

创建一个索引event_timestamp字段(如果您没有)

+2

如果这更快,我会吃我的鞋的一小部分。 – Strawberry

2

要走的路是创建一个两列的INDEX,第一个是alarm_life_cycle_id,第二个是event_timestamp。

ALTER TABLE `alarm_notification` ADD INDEX `my_index` (`alarm_life_cycle_id`, `event_timestamp`) 

有了这个指标到位,MIN()MAX()ORDER BY ... LIMIT 1之间的差异将是几乎可以忽略不计请查看更多:https://stackoverflow.com/a/426785/953684