繁体   English   中英

如何使用php在不给mysql服务器加负载的情况下运行多个sql查询?

[英]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语句。

http://helpdeskgeek.com/office-tips/excel-to-mysql/

好,这是个好主意

在每次检查之后(无论是否存在查询)都不会运行查询,只要您到达末尾,然后添加到您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM