快速获取mysql中记录数的方法

Posted

技术标签:

【中文标题】快速获取mysql中记录数的方法【英文标题】:fast way to get number of records in mysql 【发布时间】:2015-12-28 14:50:02 【问题描述】:

我正在 mysql 中编写一个查询来连接两个表。并且两个表都有超过 50,000 条记录。

表 EMP 列 空虚,

项目,

代码,

状态

表 EMPINFO

empid,

项目,

代码,

项目类型,

花费的时间,

技能

每个表都有候选键[empid, project, code]

所以当我使用 INNER join 加入表时

like this INNER JOIN 
ON a.empid = b.empid 
and a.project = b.project
and a.code = b.code

我得到了结果,但是如果我在外部查询中添加 count(*) 来计算记录数,连接失败会花费很多时间。

有什么方法可以加快获取记录的数量吗?

我想听听更多关于加快内部联接查询以及在两个表中具有相同候选键的建议。

【问题讨论】:

请显示您的完整查询和表定义。 您要加入的字段是否有索引? 试试basic sql tuning 使用解释:dev.mysql.com/doc/refman/5.7/en/using-explain.html 这个计数在哪里使用? UI 中的大多数记录集对象都有一个作为记录集对象的一部分自动返回的记录计数。我想我是在问您是否需要在数据库或 UI 中进行计数。 【参考方案1】:
INDEX(empid, project, code) -- in any order.

这些桌子是 1:1 的吗?如果是这样,为什么要JOIN才能做COUNT?

请提供SHOW CREATE TABLE。 (如果存在数据类型差异,这可能是个大问题。)

请提供实际的SELECT

你有多少内存?请提供SHOW VARIABLES LIKE '%buffer%';

【讨论】:

我已经在两个表中的超键上创建了一个索引。现在它工作得很好。

以上是关于快速获取mysql中记录数的方法的主要内容,如果未能解决你的问题,请参考以下文章

POI获取Excel列数和行数的方法

MySQL 大数据量快速插入方法和语句优化

获得接近 2 次幂数的快速方法(浮点数)

PHP获取MySql新增记录ID值的方法

MySQL中too many connections超出最大连接数的处理方法

Mysql优化方法