开发者社区 问答 正文

MySQL:计算行数的最快方法?mysql

在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() 有人会认为第一种方法应该更快,因为在内部确定类似情况时,这显然是数据库领域,而数据库引擎应该比其他任何人都要快。

展开
收起
保持可爱mmm 2020-05-17 09:45:43 684 分享 版权
1 条回答
写回答
取消 提交回答
  • 当您COUNT(*)使用count列索引时,它将是最好的结果。使用MyISAM引擎的Mysql 实际上存储行数,每次尝试对所有行进行计数时,它都不会对所有行进行计数。(基于主键的列)

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

    如果COUNT(*)速度较慢,则应EXPLAIN在查询上运行,并检查是否确实使用了索引以及应将索引添加到何处。

    以下不是最快的方法,但是在某些情况下,这COUNT(*)并不完全适合-在开始对结果进行分组时,您可能会遇到问题,即COUNT实际上并没有计算所有行。

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

    SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0; 选择所需的行后,可以通过以下单个查询获取计数:

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

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

    来源:stack overflow

    2020-05-17 10:01:38
    赞同 展开评论