根据时间戳过滤大量行

Filtering large number of rows based on timestamp

我有一个 table,其中包含 800 万条记录,我需要根据名为 connect_timestamp 且类型为 TIMESTAMP 的字段执行删除和 SELECT 等操作. table 称为 data

但是做类似

的事情

SELECT count(*) FROM data WHERE unix_timestamp(connect_timestamp) < 1483272827

耗时很长,导致NGINX等服务超时,对于这么大的数据量,有没有更好的办法用内置的MySQl函数来解决?

我认为这是由于 unix_timestamp() 函数,但是执行 DATE_SUB 也没有帮助

该列确实应用了索引。

提高性能的一种方法是避免在列上进行转换类型(这意味着查询优化器未优化使用索引和/或数据table 的recorse 进行过滤)。所以你应该使用 where没有转换的条件

SELECT count(*) 
FROM data WHERE connect_timestamp < '2017-03-03 10:10:10'   

在将时间戳放入查询之前尝试格式化时间戳,然后直接与 connect_timestamp

进行比较
SELECT count(*) FROM data WHERE connect_timestamp < '2017-01-01 12:13:00'

此外,这还会计算 1 月 1 日之前的所有数据,如果此处有大量数据,则无论如何都必须遍历所有这些行

试试这个:

SELECT count(*) FROM data WHERE  connect_timestamp  < FROM_UNIXTIME(1483272827)