MYSQL - 返回的行数与连接数?

时间:2015-05-25 20:11:50

标签: mysql

我的查询是否会被发送到数据库一次,我会一次性获取所有结果的列表然后循环,或者每次都要从DB请求下一行?

基本上,减少我希望返回的行数意味着减少对数据库的连接/调用意味着我的数据库将能够一次处理更多连接,或者数据库连接的数量不依赖于返回的数量行?

3 个答案:

答案 0 :(得分:0)

这些没有联系。您可以进行的连接数取决于线程库的质量以及每个线程可用/使用的RAM量。从本质上讲,它受到系统质量的限制,而不受数据库复杂性的限制。由于线程使用缓冲区,行数只会使进程变慢或者RAM数量固定。请看这里了解更多 https://dev.mysql.com/doc/refman/5.0/en/memory-use.html

答案 1 :(得分:0)

你的问题很模糊,而且似乎有一个混乱的术语。

从结果集中检索的行数与连接数无关。执行的语句数量也不会对连接产生任何影响。

(除非它是一个编写得非常糟糕的应用程序,用于为每个语句执行生成连接,连接和断开数据库。)

我认为你要问的是,对于每个“fetch”,是否对数据库服务器进行了“往返”,以便从SELECT查询返回的结果集中检索一行。

该问题的答案是否定的,大多数数据库库都会获取“批量”行。当客户端请求下一行时,它将从库已返回的集合中返回。一旦批次耗尽,这是另一次往返以获得下一组。这些都是“幕后”,你的应用程序不需要担心它。

无论是获取一行,还是丢弃结果集,或者是否通过并获取每一行,都无关紧要。这是相同的模式。

在性能和可伸缩性方面,如果您只需要检索四行,那么在准备包含多个行的结果集时没有任何意义。当您的查询针对数据库运行时,数据库服务器会生成结果集,并保留该结果集,直到客户端从结果集中请求一行。较大的结果集需要数据库服务器上的更多资源。

一个巨大的结果集需要更多往返数据库服务器,以检索所有行,而不是更小的结果集。

这不仅仅是行数,也是返回行的大小。 (这就是为什么当客户端实际上只使用一小部分列时,DBA类型抱怨执行SELECT * FROM查询以检索每个翻转列的开发人员查询。)

减少到数据库的往返通常可以提高性能,尤其是在客户端通过网络连接连接到数据库服务器的情况下。

但是我们并不需要担心从结果集中获取所有行所需的往返次数......需要花费的时间,客户端需要它所需的内容。

我们应该关注的是我们运行的查询数量

查询执行比获取的简单往返更多开销。必须解析SQL语句的语法(关键字和标识符的顺序和模式是正确的),语义(标识符引用有效的表,列,函数和用户必须对数据库对象具有适当的权限),生成执行计划(评估哪些索引可以满足哪些谓词和操作,执行操作的顺序排列)。最后,可以执行该语句,如果正在返回结果集,请准备它,然后通知客户端查询完成状态,并等待客户端从结果集请求行,当客户端关闭结果集时,数据库服务器可以清理,释放内存等。

答案 2 :(得分:0)

问:我的查询是否会被发送到数据库一次,我会一次性获取所有结果的列表然后循环,或者每次都要从DB请求下一行?

答:你正在收回一批行。您正在迭代直到您需要下一批(在同一连接上访问DB)。批量大小取决于多个条件,如果您的查询结果数据集很小,您可以一次性获得所有结果。

问:基本上,减少我希望返回的行数意味着减少对数据库的连接/调用意味着我的数据库将能够一次处理更多连接,或者数据库连接的数量不依赖于数字返回的行?

答:数据集越大,可能会有更多的行程(以获取下一组行)到DB。但是,打开到DB的连接数不依赖于单个查询的结果数据集大小。