在MySQL中高效地获取上一条记录(通过索引)
我在'name'VARCHAR50和'ts'TIMESTAMP列上有一个复合索引 对于一个特定的记录,我想按时间查找前面的记录,如果它存在的话,它具有相同的“名称” 当使用低级非关系数据库(如D-ISAM)时,这是快速而简单的在MySQL中高效地获取上一条记录(通过索引),mysql,sql,indexing,Mysql,Sql,Indexing,我在'name'VARCHAR50和'ts'TIMESTAMP列上有一个复合索引 对于一个特定的记录,我想按时间查找前面的记录,如果它存在的话,它具有相同的“名称” 当使用低级非关系数据库(如D-ISAM)时,这是快速而简单的 如何在MySQL中做到这一点?这里有一种方法。查找与要查找的记录同名的所有行。然后按ts的相反顺序排序,然后选择第一个: select t.* from table t join (select * from table t where <record =
如何在MySQL中做到这一点?这里有一种方法。查找与要查找的记录同名的所有行。然后按ts的相反顺序排序,然后选择第一个:
select t.*
from table t join
(select * from table t where <record = your record>
) therec
on t.name = therec.name and t.ts < therec.ts
order by t.ts desc
limit 1;
我能找到的所有帮助都是按照@GordonLinoff的回答 最后,我通过在每条记录中添加一个“seq”余数来解决这个问题,显示它在索引中的位置 这只是一个只附加数据的解决方案,但这是我的用例 我添加了以下值:
SET @num := 0;
UPDATE my_table
SET seq = @num := @num + 1
WHERE name = "my name"
ORDER BY ts, id
这是有效的,但很难看。它大约在上运行,而子查询方法在^2上运行,这对于超过几千行的任何内容都是不切实际的 当某物小于某物时,按某物的顺序限制1