0

我陷入了困境,其中一种方法最有效。

假设您有一个连接多个表并查询数千条记录的查询。比,你必须得到所有这些结果的总分页。

是不是更快?

1)做一个完整的选择(假设你必须选择50列),计算行数,然后运行另一个有限制的查询?(MySQL 缓存是否会帮助这种情况,已经在第一个用于计数的查询中选择了您需要的所有列?)

2)首先使用 COUNT 函数进行查询,然后进行查询以选择您需要的结果。

3) 不使用 MySQL COUNT 函数,而是选择 ID 的查询并使用 PHP 函数 mysql_num_rows?

  • 我认为数字 2 是最好的选择,使用 MySQL 内置的 COUNT 函数,但我知道 MySQL 使用缓存,所以,在第一次查询时选择所有结果会更快吗?

谢谢,

4

2 回答 2

1

看看Found_Rows()

一个SELECT语句可能包含一个LIMIT子句来限制服务器返回给客户端的行数。在某些情况下,希望知道在没有 LIMIT 的情况下该语句将返回多少行,但无需再次运行该语句。要获得此行数,SQL_CALC_FOUND_ROWS请在语句中包含一个选项SELECT ,然后再调用FOUND_ROWS()

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

第二个 SELECT 返回一个数字,指示如果没有 LIMIT 子句,第一个 SELECT` 将返回多少行。

于 2012-07-17T23:14:22.617 回答
0

我的猜测是 2,但事实是它完全取决于数据大小、表、索引、MySql 版本等。

找到答案的唯一方法是尝试每一个并测量它们需要多长时间。但就像我说的,我的预感是第二位。

于 2012-07-17T23:13:34.193 回答