场景:包含 20 个 ID 字段的高事务表,这些字段链接到具有 BOTH 的其他表
- WRITES:大量插入、更新和删除(通过一个进程/连接)
- READS:数十个查询针对它运行,具有可变的选择标准,可能包括从 1 到所有 20 个 ID 字段(通过许多进程/连接)的任何地方。
鉴于您可以通过减少索引的数量来加速加载,并通过确保连接/过滤字段被索引来加速查询。在这个特定的表上,在加载期间暂时删除索引不是一个选项,因为查询可能会同时运行。
在大量阅读索引计划、使用复合索引、事务和表锁定之后,我完全糊涂了!
问题:
1.) 一般来说,由于不能选择删除索引(已经使用事务),因此应该通过表锁定最好地解决 UPDATE 问题吗?
2.)关于读取的索引计划,并考虑到每个选择的 ID 字段总数和可变字段数,最好是维护 20 个单独的索引加上一些最常见的化合物,还是实施某种排序散列?
在阅读了对类似主题的其他回复后,我意识到“一般”的答案是“一般”不赞成的。但是,我不确定如何使用 1 个键和 20 个 ID 字段以及用于删除、更新和插入查询的示例代码以及带有各种 ID 字段组合的十几个选择查询的示例代码来模拟一个表,这将说明任何问题比我更好(尽管可以接受其他意见!)。
感谢任何指导或参考(请注意,我已经在 MYSQL 文档中花费了大量时间)。