我正在寻找一种方法来优化具有 8M+ 行的大型表。
表结构如下所示: id INT PRIMARY AUTOINCREMENT 已删除 TINYINT(1) status TINYINT(1) ~10 个其他数据字段
还有(id,removed,status)唯一索引
大约一半行已删除=1,一半行已删除=0 90% 行的状态=1,剩余 10% 的值范围为 0-9
应用程序使用大约 200 个不同的查询直接或通过 JOIN 访问此表。重写应用程序和查询超出了我的范围。
大约 90% 的查询仅访问removed=0 AND status=1 行(WHERE...removed=0 AND status=1...),~1% 的查询同时访问已删除和未删除的行,无论状态如何,9%查询是直接 PK 命中(其中 id=X)。
问题是 - 按删除字段 (0,1) 进行分区是否会加速这 90% 的删除 = 0 的查询?如果 innodb 引擎只需访问约 3.5M 而不是 7M 行,理论上它应该加速所有查询?或者事实并非如此?