我一直在阅读,但似乎找不到其他解决方法。我正在将android中的JSON发送到我的php文件中,然后我需要遍历它以查看跟踪ID是否已在服务器中,如果没有,请插入服务器中。有时,只有300个条目可能需要5分钟。有更好的方法吗?
$JSON_Received = $_POST["jsonObject"];
$array = json_decode($JSON_Received, true);
foreach ($array as $key => $value)
{
$trackingID = $value['trackingID'];
$name = $value['name'];
$email = $value['email'];
$query = "SELECT * FROM myTable WHERE key_tracking_id = $trackingID";
$result = $link->query($query);
if ($result){
if($result->num_rows == 0){
$link->query("INSERT INTO tracking_db (`key_tracking_id`, `key_name`, `key_email`)
VALUES ('$trackingID', '$name', '$email')");
}
}
}
解决方案:
因此,在注释得到一些帮助之后,我将辅助索引添加到数据库中,因为主索引仍遍历整个数据库。这是我为数据库创建的表。
CREATE TABLE `myTable` (
`key_tracking_id` int(11) NOT NULL AUTO_INCREMENT,
`key_name` varchar(255) NOT NULL,
`key_email` varchar(255) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`key_tracking_id`),
KEY `key_email` (`key_email`)
) ENGINE=MyISAM AUTO_INCREMENT=183298 DEFAULT CHARSET=latin1
答案 0 :(得分:-1)
您可以通过优化SELECT查询来减少时间。我假设您有一个大型数据库,因为它仅花费300个条目就花费了很长时间。为了找出该行是否存在,而不是SELECT *并获取所有内容,请使用以下命令:
SELECT EXISTS(SELECT * FROM myTable WHERE key_tracking_id = $trackingID)
这样,即使您正在调用SELECT *,但在找到第一行时它只会停止。
关于插入查询,没有什么要优化的。如果您的服务器还可以优化,那么仅SELECT查询就足够了。