gpt4 book ai didi

MySQL:计算行数的最快方法

转载 作者:IT老高 更新时间:2023-10-28 12:50:48 24 4
gpt4 key购买 nike

在 MySQL 中哪种计算行数的方法应该更快?

这个:

SELECT COUNT(*) FROM ... WHERE ...

或者,替代方案:

SELECT 1 FROM ... WHERE ...

// and then count the results with a built-in function, e.g. in PHP mysql_num_rows()

人们会认为第一种方法应该更快,因为这显然是数据库领域,并且在内部确定此类事情时,数据库引擎应该比其他任何人都快。

最佳答案

当你 COUNT(*) 时,它会接受计数列索引,所以这将是最好的结果。带有 MyISAM 引擎的 MySQL 实际上存储行数,每次您尝试计算所有行时它不会计算所有行。 (基于主键的列)

使用 PHP 计算行数不是很聪明,因为您必须将数据从 MySQL 发送到 PHP。当您可以在 MySQL 端实现相同的目标时,为什么要这样做?

如果 COUNT(*) 很慢,您应该在查询上运行 EXPLAIN,并检查是否真的使用了索引,以及应该添加它们的位置。


以下不是 最快 方式,但有一种情况,COUNT(*) 并不真正适合 - 当您开始对结果进行分组时,您可以遇到 COUNT 并没有真正计算所有行的问题。

解决方案是 SQL_CALC_FOUND_ROWS。这通常在您选择行但仍需要知道总行数(例如,用于分页)时使用。选择数据行时,只需在 SELECT 后附加 SQL_CALC_FOUND_ROWS 关键字:

SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

在你选择了需要的行之后,你可以通过这个单一的查询来获得计数:

SELECT FOUND_ROWS();

FOUND_ROWS() 必须在数据选择查询之后立即调用。


总而言之,实际上一切都取决于您拥有多少条目以及 WHERE 语句中的内容。当有很多行(数万、数百万甚至更多)时,您应该真正注意如何使用索引。

关于MySQL:计算行数的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com