File tree Expand file tree Collapse file tree
advance/excellent-article Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -122,4 +122,16 @@ head:
122122
123123以上实际是消息队列的两种消息模式,点对点或发布订阅模式。模型为示意图,供参考。
124124
125- * 本文转载自:https://www.cnblogs.com/ruiati/p/6649868.html *
125+
126+
127+
128+
129+
130+
131+ 最后给大家分享一个Github仓库,上面有大彬整理的** 300多本经典的计算机书籍PDF** ,包括** C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生** 等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
132+
133+ ![ ] ( http://img.topjavaer.cn/image/Image.png )
134+
135+ ![ ] ( http://img.topjavaer.cn/image/image-20221030094126118.png )
136+
137+ [ ** Github地址** ] ( https://github.com/Tyson0314/java-books )
Original file line number Diff line number Diff line change @@ -1180,4 +1180,23 @@ canal的原理如下:
11801180- row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,由于很多操作,会导致大量行的改动(比如alter table),因此这种模式的文件保存的信息太多,日志量太大。
11811181- mixed:一种折中的方案,普通操作使用statement记录,当无法使用statement的时候使用row。
11821182
1183+ ## 阿里手册为什么禁止使用 count(列名)或 count(常量)来替代 count(* )
1184+
1185+ 先看下这几种方式的区别。
1186+
1187+ count(主键id):InnoDB引擎会遍历整张表,把每一行id值都取出来,返给server层。server层拿到id后,判断是不可能为空的,就按行累加,不再对每个值进行NULL判断。
1188+
1189+ count(常量):InnoDB引擎会遍历整张表,但不取值。server层对于返回的每一行,放一个常量进去,判断是不可能为空的,按行累加,不再对每个值进行NULL判断。count(常量)比count(主键id)执行的要快,因为从引擎放回id会涉及解析数据行,以及拷贝字段值的操作。
1190+
1191+ count(字段):全表扫描,分情况讨论。
1192+
1193+ 1、如果参数字段定义NOT NULL,判断是不可能为空的,按行累加,不再对每个值进行NULL判断。
1194+ 2、如果参数字段定义允许为NULL,那么执行的时候,判断可能是NULL,还要把值取出来再判断一下,不是NULL才累加。
1195+
1196+ count(* ):统计所有的列,相当于行数,统计结果中会包含字段值为null的列;
1197+
1198+ COUNT(` * ` )是SQL92定义的标准统计行数的语法,效率高,MySQL对它进行了很多优化,MyISAM中会直接把表的总行数单独记录下来供COUNT(* )查询,而InnoDB则会在扫表的时候选择最小的索引来降低成本。
1199+
1200+ 所以,建议使用COUNT(\* )查询表的行数!
1201+
11831202![ ] ( http://img.topjavaer.cn/img/20220612101342.png )
You can’t perform that action at this time.
0 commit comments