我运营一个中小型汽车网站,我们正在尝试记录访问者浏览车辆详细页面的次数。我们通过哈希化当前车辆的制造商、型号和邮编(使用md5算法)来实现此目的。然后,我们保留vehicle_count总数,并在哈希匹配时递增该总数。
经过计算,大约有50个制造商,每个制造商有大约50个型号,我们的位置数据库有大约44,000个唯一的邮政编码。大约有1亿多个潜在的唯一哈希值。
以下是创建表的代码:
经过计算,大约有50个制造商,每个制造商有大约50个型号,我们的位置数据库有大约44,000个唯一的邮政编码。大约有1亿多个潜在的唯一哈希值。
以下是创建表的代码:
CREATE TABLE `vehicle_detail_page` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`vehicle_hash` char(32) NOT NULL,
`make` varchar(100) NOT NULL,
`model` varchar(100) NOT NULL,
`zip_code` char(7) DEFAULT NULL,
`vehicle_count` int(6) unsigned DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `vehicle_hash` (`vehicle_hash`),
KEY `make` (`make`),
KEY `model` (`model`),
KEY `zip_code` (`zip_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以下是插入/更新表格的PHP代码:
public function insertUpdate($make, $model, $zip)
{
// set table
$table = self::TABLE;
// create hash
$hash = md5($make.$model.$zip);
// insert or update count
try
{
$stmt = $this->db->conn->prepare("INSERT INTO $table
(vehicle_hash,
make,
model,
zip_code)
VALUES
(:vehicle_hash,
:make,
:model,
:zip_code)
ON DUPLICATE KEY UPDATE
vehicle_count = vehicle_count + 1;");
$stmt->bindParam(':vehicle_hash', $hash, PDO::PARAM_STR);
$stmt->bindParam(':make', $make, PDO::PARAM_STR);
$stmt->bindParam(':model', $model, PDO::PARAM_STR);
$stmt->bindParam(':zip_code', $zip, PDO::PARAM_STR);
$stmt->execute();
} catch (Exception $e)
{
return FALSE;
}
return TRUE;
}
问题:
- MySQL能处理这么多行吗?
- 有人看到这段代码有什么问题吗?是否有更好的方法来做这个?
- 查询这些数据会是什么样子?
最重要的问题是,一旦这个表格变得很大,上面的php函数将如何执行。如果/当该表格有几百万行以上时,该表格将如何执行。有人能给出一些见解吗?
WHERE
子句。 - MonkeyZeus