Mysql 时间戳作为int字段,查询性能

Mysql 时间戳作为int字段,查询性能,mysql,performance,Mysql,Performance,我将时间戳存储为int字段。在大型表上,需要花费很长时间才能在日期插入行,因为我使用的是来自_UNIXTIME的mysql函数 SELECT * FROM table WHERE FROM_UNIXTIME(timestamp_field, '%Y-%m-%d') = '2010-04-04' 有什么方法可以加快查询速度吗?也许我应该使用timestamp\u field>=x和timestamp\u field=UNIX \时间戳('2010-04-14 00:00:00') 如果能够,将日

我将时间戳存储为int字段。在大型表上,需要花费很长时间才能在日期插入行,因为我使用的是来自_UNIXTIME的mysql函数

SELECT * FROM table WHERE FROM_UNIXTIME(timestamp_field, '%Y-%m-%d') = '2010-04-04'
有什么方法可以加快查询速度吗?也许我应该使用
timestamp\u field>=x和timestamp\u field
对行进行查询

多谢各位


编辑此查询非常有效,但您应该注意时间戳字段上的索引

SELECT * FROM table WHERE 
timestamp_field >= UNIX_TIMESTAMP('2010-04-14 00:00:00')
AND timestamp_field <= UNIX_TIMESTAMP('2010-04-14 23:59:59')
从表中选择*,其中
时间戳\字段>=UNIX \时间戳('2010-04-14 00:00:00')

如果能够,将日期存储为适当的datetime字段,或者在运行查询的代码中,在将日期发送到查询之前将其转换为unix时间戳会更快

来自_UNIXTIME的
必须先转换表中的每条记录,然后才能检查它,正如您所看到的,它存在性能问题。使用与查询中实际使用的数据类型最接近的本机数据类型,或者使用列的数据类型进行查询,是最快的方法

因此,如果您需要在时间上继续使用int字段,那么是的,在严格整数上使用
将极大地提高性能,假设您将内容存储到第二个,而不是当天午夜的时间戳。

在常量上使用,而不是从列上的UNIXTIME:

SELECT * FROM table
WHERE timestamp_field
   BETWEEN UNIX_TIMESTAMP('2010-04-14 00:00:00')
       AND UNIX_TIMESTAMP('2010-04-14 23:59:59')
这可以更快,因为它允许数据库在列
timestamp\u字段
上使用索引(如果存在)。在列上使用非函数(如FROM_UNIXTIME)时,数据库不可能使用索引

如果
timestamp\u字段上没有索引,请添加一个索引


完成此操作后,您还可以尝试通过选择所需的列来进一步提高性能,而不是使用
SELECT*

了解您的想法!但您的查询返回0行,而来自“编辑”的查询返回行。我认为您混淆了timestamp_字段=日期('2010-04-04'),因为timestamp_字段是timestamp,而不是INT。@Kirzilla:是的,您编辑的版本是正确的。如果这不是很快,很可能是因为您在timestamp_字段上没有索引。在timestamp_字段上创建索引以加快查询速度。如果您认为时间戳_字段上已经有索引,请为您的表发布
SHOW CREATE TABLE
。您说得对。有了索引,它的工作速度真的很快。谢谢您的回答。请为您的表格发布
显示创建表格
。在该查询中,将小写的
更改为实际的表名,而不是大写的
,因为这是命令的一部分。