mysql 怎么优化数量查询?
1 个回答
明知不可为而为之就是我最大的诚意夜太在innodb引擎下, ### COUNT(*)和Count(id) SELECT Count(*)其实是跟SELECT Count(id)是等价的,会去主键的聚集索引下扫描每一行,然后判断行是否为Null,不为Null计入Count。 ### Count(col) 也是全表扫描,判断这一行的col值是否为null,不为null,计入Count ### 怎么优化count(*)? 可以使用查询一个非空的唯一索引键的数量来替代count(*),因为count(*)需要遍历主键的聚集索引的叶子节点,读取每一行的数据,而Count(unique_key)会去unique_key的索引下读取每个叶子的节点,因为每个叶子节点只包含unique_key和主键id,数据大小比聚集索引下的叶子节点下,IO会小一些。 ### Myisam可以缓存count,而innodb不能缓存count 因为innodb有事务的概念,如果是在PR的隔离级别下,每个事务查询的count应该等于事务开始时count+本事务执行过程中对count的改变,但是由于每个事务可以单独设置会话隔离级别,所以很难实现对count的缓存。发布于 2022-02-12 05:52 •IP属地 西藏举报评论收藏
公众号进入网站体验更佳

