我有一个巨大的蜂巢表,可能有数百万行,我希望在一个列的基础上进行搜索(该列有人类可读格式的时间)。基本上我只想搜索最近插入的行(比如过去1小时)。
当我执行select * from table name
时,它始终从开始返回结果。我必须比较每一行的时间,直到我到达最近插入的行,这是一项耗时的任务。有什么方法可以从最后一行进行搜索并向相反方向移动,直到我到达特定行?
附加信息:表格根据日期进行分区。
答案 0 :(得分:0)
你应该使用一个where
子句,包括一个unix_timestamp()
函数和你正在存储时间的模式,然后选择那些你感兴趣的行(在你的情况下,那些有你的行)比#34;现在更长的时间戳 - 一小时")。
如果您使用字符串列,我不知道如何优化它。如果你可以修改你的表,那么最好有一个时间戳或日期列并制作一个索引来加速查询,但是如果你必须在字符串列上使用函数,那么索引在这里没有帮助,我很害怕。
代码或SQL无法优化糟糕的设计选择(对于必须进行任何计算的数据使用字符串列,这只是一个糟糕的选择)。如果您在日期栏中对表进行分区,则可以添加一个条款,仅使用今天的日期(或者今天和昨天,如果您对"现在 - x小时" ),但那是关于它的。