1
zlowly 2021 年 7 月 16 日
如果表上有主键的话,count (主键字段)可以只做索引扫描,应该会比全表扫描要快。
|
2
myd 2021 年 7 月 16 日
如果是 Innodb 存储引擎,且没有创建辅助索引时,是要全表扫描才能获取到行数的。
即使有主键索引,也需要全表扫描。 你需要创建一个辅助索引,只需要扫描辅助索引即可获取到总行数,执行速度在 1 秒内。SQL 直接 count(*)也一样。 |
3
xx6412223 2021 年 7 月 16 日 Prior to MySQL 5.7.18, InnoDB processes SELECT COUNT(*) statements by scanning the clustered index. As of MySQL 5.7.18, InnoDB processes SELECT COUNT(*) statements by traversing the smallest available secondary index unless an index or optimizer hint directs the optimizer to use a different index. If a secondary index is not present, the clustered index is scanned.
创建一个辅助索引,建议用最小字段创建 |
4
mikulch 2021 年 7 月 16 日
用你的表里面的,类型小,长度最少的列,创建一个二级索引。然后查询的时候使用 select count(column) from 'table' 来执行覆盖索引扫描,这样子的话就不用执行全表扫描了。
|
6
potatosmith 2021 年 7 月 16 日
Innodb 引擎不会存储表的总行数,求总数又不用索引的话只能全表扫描
|
7
onepunch 2021 年 7 月 17 日
闲着没事 count 全表干什么
|
8
JasonLaw 2021 年 7 月 18 日
|
9
zhanggang807 2021 年 7 月 19 日
@JasonLaw bingo
|