php - 在 MySQL 中计算特定日期之间数百万行的最佳方法

标签 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)";

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

最佳答案

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

关于php - 在 MySQL 中计算特定日期之间数百万行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478690/

相关文章:

php - 将引导表单设置为居中

sql - Postgres : how to call a function that returns a table and pass params from a query

sql - 在 SQL 中查找某些行值的公共(public)行

mysql - 如何在MySql中进行多对多子查询

php - 未定义索引 : on uploading an image into database from php

php - 将 SQL 中的 HTML 插入文本区域?

Mysqld 超过 200% CPU

php - 数据库切片密码的最后两个字符(?!)

MySQL 对 varbinary 字段进行不区分大小写的搜索?

javascript - 通过自定义 wp_query CPT 上的下拉菜单进行简单排序