2013-05-01 355 views
0

查询:MySQL的UPDATE查询时间太长(100ms的+)

mysqli_query($link 
"UPDATE users SET lastclick = '". time() ."', lastpage = '". ucfirst(page) ."' 
WHERE id = '". $user['id'] ."' "); 

时间太长(100毫秒+),我怎么能加快该查询/是有可能加快这一查询?

表结构

enter image description here

+1

添加索引到你的表? – GrandMasterFlush 2013-05-01 12:34:51

+0

请让我们知道您的表格结构。给我们一个DESCRIBE用户查询的输出 – GregD 2013-05-01 12:35:45

+0

@GregD - > http://i41.tinypic.com/35avd05.png – Obe 2013-05-01 12:44:10

回答

0

一个来进入我的脑海里的东西,这就是为什么你有lastclick列设置为INT,当你输入的时间价值?另外,对于查询中的id列,不需要单引号。你输入整数,列也被定义为一个整数。试试这个查询:

UPDATE users 
    SET lastclick = UNIX_TIMESTAMP(), 
     lastpage = '". ucfirst(page) ."' 
WHERE id = ". $user['id'] ." 

您还需要通过调用像这样类似的查询更改表结构:有关ALTER TABLE语句的语法

ALTER TABLE users 
    MODIFY lastclick TIMESTAMP NOT NULL; 

更多信息,请参阅MySQL Reference Manual。此外,请参阅UNIX_TIMESTAMP()命令help page

通过将列定义为TIMESTAMP,MySQL在内部将数据存储为UNIX Timestamp值。在执行SELECT声明时,MySQL自动将数据值转换为时间戳格式。如果您希望接收该数据为UNIX时间戳,而不是格式化字符串,然后用同样的,UNIX_TIMESTAMP()命令,如:

SELECT UNIX_TIMESTAMP(lastclick) 
    FROM users; 
+0

谢谢。但我更喜欢unix时间戳。 – Obe 2013-05-01 13:43:56

+0

没问题。 MySQL也有它。请参阅我的编辑。 – GregD 2013-05-01 14:09:45

+0

再次感谢... – Obe 2013-05-01 15:18:08