mysql 获得表记录总数的效率问题 急急急

时间:2021-08-10 21:40:42
本人目前需要操作20W条的记录表,现目的是要获得这个表的记录总数,需要连表查询,有查询条件,执行速度超级慢,已经超过能等待极限了  求优化方法???

7 个解决方案

#1


代码、表结构、索引贴出来

#2


20万很少啊。为啥会慢呢~

#3


你的语句是什么? 如果仅是 select count(*) from tableName 则不会慢的。


建议贴出你的实际SQL语句及
explain select ...
show index from ...
以供分析。

问题说明越详细,回答也会越准确!参见如何提问。( 提问的智慧

#4


引用 楼主 Bicycle_0 的回复:
本人目前需要操作20W条的记录表,现目的是要获得这个表的记录总数,需要连表查询,有查询条件,执行速度超级慢,已经超过能等待极限了  求优化方法???


引用 3 楼 ACMAIN_CHM 的回复:
你的语句是什么? 如果仅是 select count(*) from tableName 则不会慢的。


建议贴出你的实际SQL语句及
explain select ...
show index from ...
以供分析。

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)


SQL 语句(个人修改一次了,原来没使用COUNT方法需要1分钟以上,目前需要2-3秒)

$sql  = 'select * from K1.A ';
$sql .= 'JOIN K1.B ON K1.B.uid = K1.A.uid ';
$sql .= 'JOIN K2.C ON K2.C.Uid = K1.A.uid ';
$sql .= 'where `B`.`uTypeid` = 1 ';
$sql .= 'ORDER BY A.uid DESC ';
$number_sql = preg_replace('/\*/','COUNT(*) as number ',$sql);
//echo $sql;
//$query = $this->db->query($sql);
$data['number'] = $this->db->query($number_sql)->row();
$sql .= 'LIMIT 11 ';
$query = $this->db->query($sql);
表结构(K1,K2 表示两个数据库)
A

#5


A
uid -》 索引

uid -> 索引
C
Uid -》索引 
 三者相同联系

#6


贴出执行计划explain select ....
show index from 表

#7


引用 6 楼 lzd_83 的回复:
贴出执行计划explain select ....
show index from 表


mysql 获得表记录总数的效率问题 急急急mysql 获得表记录总数的效率问题 急急急mysql 获得表记录总数的效率问题 急急急mysql 获得表记录总数的效率问题 急急急

#1


代码、表结构、索引贴出来

#2


20万很少啊。为啥会慢呢~

#3


你的语句是什么? 如果仅是 select count(*) from tableName 则不会慢的。


建议贴出你的实际SQL语句及
explain select ...
show index from ...
以供分析。

问题说明越详细,回答也会越准确!参见如何提问。( 提问的智慧

#4


引用 楼主 Bicycle_0 的回复:
本人目前需要操作20W条的记录表,现目的是要获得这个表的记录总数,需要连表查询,有查询条件,执行速度超级慢,已经超过能等待极限了  求优化方法???


引用 3 楼 ACMAIN_CHM 的回复:
你的语句是什么? 如果仅是 select count(*) from tableName 则不会慢的。


建议贴出你的实际SQL语句及
explain select ...
show index from ...
以供分析。

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)


SQL 语句(个人修改一次了,原来没使用COUNT方法需要1分钟以上,目前需要2-3秒)

$sql  = 'select * from K1.A ';
$sql .= 'JOIN K1.B ON K1.B.uid = K1.A.uid ';
$sql .= 'JOIN K2.C ON K2.C.Uid = K1.A.uid ';
$sql .= 'where `B`.`uTypeid` = 1 ';
$sql .= 'ORDER BY A.uid DESC ';
$number_sql = preg_replace('/\*/','COUNT(*) as number ',$sql);
//echo $sql;
//$query = $this->db->query($sql);
$data['number'] = $this->db->query($number_sql)->row();
$sql .= 'LIMIT 11 ';
$query = $this->db->query($sql);
表结构(K1,K2 表示两个数据库)
A

#5


A
uid -》 索引

uid -> 索引
C
Uid -》索引 
 三者相同联系

#6


贴出执行计划explain select ....
show index from 表

#7


引用 6 楼 lzd_83 的回复:
贴出执行计划explain select ....
show index from 表


mysql 获得表记录总数的效率问题 急急急mysql 获得表记录总数的效率问题 急急急mysql 获得表记录总数的效率问题 急急急mysql 获得表记录总数的效率问题 急急急