修改数据库表引擎提高分页查询中统计行数的性能
wtune opened this issue · 2 comments
wtune commented
问题
在数据库查询记录中我们发现了存在如下查询语句:
select count(*) as col_0_0_ from sys_domain sysdomain0_
select count(*) as col_0_0_ from sys_cluster syscluster0_
这类语句是在相应的表中执行分页查询时为统计全表行数产生的,新版本的Mysql中默认使用了InnoDB作为数据库引擎,在InnoDB中不会缓存表的元数据,因此执行这样的语句会造成比较大的时间开销,而MyISAM则缓存有表的元数据,统计行数可以在很短的时间内完成。如果没有其它必须使用InnoDB的原因,建议修改这两张表的存储引擎为MyISAM从而优化这类全表count语句。
参考:https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_count
解决方法
修改sys_cluster和sys_domain的存储引擎为MyISAM
sanluan commented
非常感谢 在很多情况下 MyISAM 都要比InnoDB快,不过因为我们客户大多数比较专业,我们希望产品尽量不决定使用哪个引擎 而是交给客户去选择,所以表结构中除了必要的信息外 没特殊指定字符集,引擎,索引类型等
wtune commented
嗯嗯,不客气,可以理解^-^