栏目导航

曾夫人论坛40779开奖

COUNT( ) 和 COUNT(1)哪个效力更高?

更新时间:2020-11-21

因为主键采用的索引是聚簇索引,聚簇索引包括的信息多,显明会大于二级索引(非聚簇索引)。

1、个别情形下:COUNT(*) = COUNT(1) > COUNT(字段)

2、如果要统计COUNT(*),尽量在数据表上树立二级索引,体系会主动采用key_len小的二级索引进行扫描,这样当咱们使用SELECT COUNT(*)的时候效率就会提升,有时候晋升多少倍甚至更高都是有可能的。

如果是MySQL MyISAM存储引擎,统计数据表的行数只须要O(1)庞杂度,这是由于每张MyISAM的数据表都有个meta信息有存储了row_count值。而致性由表级锁来保障。而InnoDB支撑事务,采用行级锁和MVCC机制,所以无奈像MyISAM样,只保护个row_count变量。因而就需要采取扫描全表,进行轮回+计数的方法来实现统计。

在MySQL InnoDB存储引擎中,COUNT(*)跟COUNT(1)都是对的所有成果进行的COUNT。如果有WHERE子句,则是对所有合乎筛选前提的数据前进行统计。假如不WHERE子句,则是对数据表的数据行数进行统计。

如果有多个二级索引的时候,会使用key_len小的二级索引进行扫描。当没有二级索引的时候,才会采用主键索引来进行统计。

因此COUNT(*)和COUNT(1)实质上没有差别,都想亲眼看看深受业界认可的妇儿专家、没有,执行的复杂度都是O(N),也就是采用全表扫描,进行循环+计数的方式进行统计。

优化总结:

需要留神的是,在实际执行中COUNT(*)和COUNT(1)履行时光可能略有差异,不外你仍是能够把这两个在执行效力上看成是相等的。

对于查找详细的行来说,采用主键索引效率更高。而对COUNT(*)和COUNT(1)这种,不需要查找详细的行,只是统计行数来说,系统会自动采用占用空间更小的二级索引来进行统计。

所以尽量应用COUNT(*),当然如果你要统计的是就是某个字段的非空数据行数,那另当别论。究竟执行效率比拟的条件是要结果一样才行,彩霸王超级中特网

另外在InnoDB引擎中,如果是采用COUNT(*)和COUNT(1)来统计数据行数,要尽量采用二级索引。



友情链接:

Copyright 2018-2021 曾夫人 版权所有,未经授权,禁止转载。

香港马会开奖结果直播| 香港最快开奖现场记录| 开奖直播| 香港王中王中特网站| 本港台开奖现场直播ji| www.4719.com| 六合挂牌主论坛| 香港挂牌彩图| 1231155中金心水论坛| 新铁算盘心水论坛| 六合八挂图| 香港平特论坛|