mysql 查询连接和速度/替代数据库解决方案有必要吗?

Posted

技术标签:

【中文标题】mysql 查询连接和速度/替代数据库解决方案有必要吗?【英文标题】:mysql query connections and speed / alternative database solution necessary? 【发布时间】:2012-07-11 15:25:01 【问题描述】:

我知道您可以在 mysql_query()(或 mysqli_...)内执行 10 个 SQL 查询,但这与执行 10 个 mysql_query()s 和每个 SQL 查询有何不同?

如果它们不同并且第一个解决方案更有效,我将如何在其中的一个查询上使用mysql_fetch_assoc() 函数?

如果第一个解决方案允许我将每页的连接数限制为每mysql_query() 1 个,那么我认为我将有足够的 mysql 连接来处理我的流量,但如果没有,什么 SQL 技术(或其他?)我可以使用它来更有效地从 php 连接到我的数据库(这样我就可以处理更多用户)?

我正在使用 Apache 和 PHP 5.4

【问题讨论】:

【参考方案1】:

您一次只能发送一个查询...see the docs

mysql_query() 向与指定链接标识符关联的服务器上当前活动的数据库发送唯一查询(不支持多个查询)。

您可以使用文档中的mysqli_mutli_query .. 示例:

$query  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if ($mysqli->multi_query($query)) 
    do 
        /* store first result set */
        if ($result = $mysqli->store_result()) 
            while ($row = $result->fetch_row()) 
                printf("%s\n", $row[0]);
            
            $result->free();
        
        /* print divider */
        if ($mysqli->more_results()) 
            printf("-----------------\n");
        
     while ($mysqli->next_result());


/* close connection */
$mysqli->close();

【讨论】:

你可以通过sql分隔每个查询..***.com/questions/345637/… 我可以发誓我以前用分号分隔的多个查询已经做到了,但是如果这不可能,那么多查询和多查询之间有什么区别? @maxhud 没有看到我无法确认的来源 - 但我建议它会一个接一个地执行 - 将结果存储在一个数组中......在@987654326 上需要注意一些陷阱@ - 例如,错误后的查询不会执行 - 所以我建议您更好地控制多个查询【参考方案2】:

在一次调用 mysql_query() 中运行 10 个查询与运行 10 个 mysql_query() 之间的区别在于,在第一种情况下,您只能从最后一个查询中获得结果。但只要您不执行 new mysql_connect() 它就不应该在查询之间重新连接。

另一种方法是使用mysqli_multi_query,它可以让您并行运行多个查询,从而优化一些,但不是很多。

听起来您不需要更有效的方法来连接数据库,您要么需要优化查询、排序索引等,要么数据库机器可能只是配置不正确或尺寸过小硬件方面。我猜你的实际问题是你的数据库问题太慢了?

只需使用 mysql_query() 运行,每次调用一个查询,mysql 在与 PHP 不同的机器上运行,您仍然可以每秒执行数百个 MySQL 查询而不会出汗。

【讨论】:

以上是关于mysql 查询连接和速度/替代数据库解决方案有必要吗?的主要内容,如果未能解决你的问题,请参考以下文章

mysql远程连接速度很慢

Navicat使用navicat执行sql 查询速度很慢解决方法

使 mysql 查询更快,或提出替代方案

Access 2007:逗号连接和参数查询的替代方案

mysql百万数据查询 用啥代替in,该如何处理

MySQL:常用分库分表方案汇总