[英]How to run multiple sql queries using php without giving load on mysql server?
我有一个脚本,可以读取包含产品列表的Excel工作表。 这些几乎是10000个产品。 该脚本读取这些产品并将其与mysql数据库中的产品进行比较,并检查
如果该产品不可用,则添加它(因此我已将其插入查询)
如果该产品已经可用,则进行UPDATE IT(因此我已对其进行更新查询)
现在的问题是,它在mysql服务器上创建了非常重的负载,并显示一条消息“ mysql服务器已消失..”。
我想知道是否有一种更好的方法来执行此excel工作表而不在mysql服务器上加载?
我不确定是否是这种情况,但是从您的帖子来看,我认为情况可能是每次检查都会初始化与MySQL服务器的新连接。 如果确实如此,则可以在执行此检查之前仅连接一次,然后运行所有将来通过该连接进行的查询。
一个不错的优化选择是,在MySQL中引入索引,这将大大加快产品搜索的速度,为那些在php搜索功能中引用最多的产品表列引入索引。
紧接着,您可以将MySQL缓冲区的大小增加到256 MB以上,以便缓存大多数结果,并使用InnoDB,因此您不必每次执行检查以及输入函数时都锁定整个表。
我不确定为什么PHP会加入其中。 Excel可以直接连接到MySql数据库,您应该能够执行WHERE NOT IN查询以添加项目和使用excel VBA更改的ons的UPDATE语句。
好,这是个好主意
在每次检查之后(无论是否存在查询)都不会运行查询,只要您到达末尾,然后添加到您的sql中,然后最终执行它即可。
例
$query = ""; //creat a query container
if($present) {
$query .= "UPDATE ....;"; //Remember the delimeter ";" symbol
} else {
$query .= "INSERT ....;";
}
//Now, finally run it
$result = mysql_query($query);
现在,您在最后一部分进行查询。
使用查询来处理它。
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
您可以尝试将代码压缩一些(尽管您可能已经这样做了),但是如果您认为它可以减少很多,请发布它,我们可以看看。
您知道的缓存数据已经存在,因此,如果产品变量没有定期更改,则可能不需要经常检查它们。 您可以缓存数据以便以后快速检索/更改(请参阅Memcached,还有其他缓存替代方法可用)。 您最终可能会大大减少您的工作量。
你有没有分开你的MySQL服务器? 尝试在其他子系统上运行产品检查,然后将数据库合并到主要,每小时或每天或其他任何时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.