在MySQL中某些日期之间计算数百万行的最佳方法

时间:2013-08-28 03:01:10

标签: php mysql sql performance

这是我创建表的SQL:

$sql_create_table = "CREATE TABLE {$table_name} (
                  hit_id bigint(20) unsigned NOT NULL auto_increment,
                  user_id int(7) unsigned NOT NULL default '0',
                  optin_id int(8) unsigned NOT NULL default '0',
                  hit_date datetime NOT NULL default '0000-00-00 00:00:00',
                  hit_type varchar(10) NOT NULL default '',
                  PRIMARY KEY  (hit_id),
                  KEY user_id (user_id)
             ) $charset_collate; ";

我需要知道计算查询中行数的最快方法。我当前的查询不会因为数百万行而削减它。

$sql = "SELECT hit_id FROM $table_name WHERE user_id = %d AND hit_type = %s AND hit_date >= FROM_UNIXTIME(%d) AND hit_date <= FROM_UNIXTIME(%d)";

我试过这个没有运气(没有返回正确的结果):

$sql = "SELECT COUNT(*) FROM $table_name WHERE user_id = %d AND hit_type = %s AND hit_date >= FROM_UNIXTIME(%d) AND hit_date <= FROM_UNIXTIME(%d)";

我需要做些什么才能使此查询高效,以便它不会超时数百万行?我只想计算指定参数集中的行数。

1 个答案:

答案 0 :(得分:0)

我不确定FROM_UNIXTIME函数的性能,但我要做的第一件事就是在hit_date上创建一个索引。 http://dev.mysql.com/doc/refman/5.0/en/create-index.html