mysql - 关于查询的问题,例如 select max(B) from t where A=123

标签 mysql select indexing

不知MySQL会如何处理语句?如果 A 列、B 列都被索引。

我想会有两种方法。

  1. 一个。从 t 中选择 A==123 的所有记录作为临时结果 b.从临时结果中找到最大 B 并返回。 时间复杂度可能是 O(lgN + m)。

  2. 一步得到记录,换句话说,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/

相关文章:

php - 使用 3 select 向先前的查询添加约束

mysql - 如果我们有 PRIMARY KEY,我们可以删除 id 上的 UNIQUE 和 KEY 索引吗?

performance - SQLite 中对性能的主键影响

c++ - 与 Direct3D 中的顶点和索引缓冲区作斗争

php - JQuery UI 对话框 - 只有第一个链接有效

ios - UITableViewCell 突出显示颜色永远不会点击外部链接

mysql - 想在UPDATE后写一个触发器

ios - 滚动时如何在 UITableView 上保留自定义选择格式

mysql - 有没有办法知道 mysqldump 需要多少空间?

mysql shell无法连接到mysql服务器