不知MySQL会如何处理语句?如果 A 列、B 列都被索引。
我想会有两种方法。
一个。从 t 中选择 A==123 的所有记录作为临时结果 b.从临时结果中找到最大 B 并返回。 时间复杂度可能是 O(lgN + m)。
一步得到记录,换句话说,T(N) = O(lgN)?
提前致谢。
最佳答案
我的直觉会告诉我,除非 B 可以为 null 并且 B 是稀疏的(非常稀疏,低至 1% 或更低,并且每个索引键 A 的值的平均数量少于 10%),例如以降序检查 B then 检查这些记录上的 A=123 是值得的,MySql 不会为该查询在 B 上设置索引栏。
它很可能只使用 A(如果 A 足够有选择性),从表中检索记录,按 B 降序排序并返回结果。
这意味着您的第一个案例,O(N + m)。 N 与表大小成正比,从统计上看,平均有多少条记录会满足 A={any x}
关于mysql - 关于查询的问题,例如 select max(B) from t where A=123,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5578038/