我表中的一列数据类型为TIMESTAMP。我想使用timestamp列从表中获取最新记录。表中的记录可能在几百到几百万之间变化。查询目前看起来像这样。
SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
ORDER BY event_timestamp DESC
LIMIT 1;
由于表中的记录数量,我怀疑查询可能需要相当长的时间(取决于记录)。当然,我可以在event_timestamp列上放置一个索引来提高性能。但是,我很想知道这是否是获得结果的最佳查询。或者还有其他正确的方法。
答案 0 :(得分: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
答案 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
字段上创建索引(如果您没有)