0

我遇到了 php mysqli 扩展和时间戳索引的问题。

我有一个这样的 Mysql 表:

CREATE TABLE `Test` (    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int(10)  unsigned NOT NULL DEFAULT '0',
    `created` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,
    'accepted',    
     PRIMARY KEY (`id`), 
     KEY `created` (`created`),    
     KEY `user_id` (`user_id`,`oid`)           
) ENGINE=InnoDB;  

我提出这样的要求:

SELECT * FROM `Test` WHERE created='2013-09-24 19:35:09';

当我从 Mysql 控制台或从 php Mysql 扩展使用这个请求的 EXPLAIN 时,我看到:

possible_keys: created    
key: created    
key_len: const  
ref: const    
rows: 2

但是当我从 php Mysqli 扩展发出相同的 EXPLAIN 请求时,我得到了结果:

possible_keys: null    
key: null       
key_len: null      
ref: null     
rows: 31597251  

这意味着,mysqli 扩展看不到日期时间索引并且不能使用它。USE INDEX (created) 和 FORCE INDEX (created) 没有帮助。

我如何向 Mysqli 扩展“解释”应该使用日期时间索引?

4

1 回答 1

-1

我找到了解决方案。

我应该使用:

SELECT * FROM `Test` WHERE created>=TIMESTAMP("2013-09-24 19:35:09");

并且总是使用索引。在另一种情况下,mysql 尝试将 int (datetime) 与 string 进行比较并且不能。

谢谢大家。

于 2013-09-26T07:35:15.027 回答