测验:查询与过滤
city = 'Seoul' 的行有 48 行,city <> 'Seoul' 的行有 335 行,总共 400 行。剩下的 17 行呢?
- city 为空字符串 ('') 的行
- 两侧重复计算行数
- 索引中缺少行
- city 为 NULL 的行(在任一条件下都不计数)
如何选择“所有非首尔行”,包括 NULL?
- WHERE 城市 <> '首尔'
- 哪里不是城市 = '首尔'
- 所在城市不在(“首尔”)
- 与“首尔”不同的城市
如果 NOT IN 列表至少包含一个 NULL 会发生什么?
- NULL 被忽略并与余数进行比较。
- 发生错误
- 没有一行结果
- 仅返回 NULL 的行。
列出多个CASE WHEN时要注意什么?
- 所有条件都会被评估,最后一个获胜
- 选择从顶部开始的第一个真正的分支,因此顺序优先。
- 如果条件重叠,则会发生错误
- ELSE不能省略
仅使用 ORDER BYcreated_at DESC 完成分页时会出现什么问题?
- 从第二页开始,根本不应用排序。
- 像created_at这样的行顺序无法保证,导致页面之间出现重复或遗漏。
- OFFSET 子句不能一起使用
- 无法使用排序列的索引
为什么基于 OFFSET 的分页越往后页越慢?
- 因为每次都要重新排序。
- 因为索引不包含后一个值
- 这是因为要跳过的行实际上必须被读取并丢弃。
- 由于网络传输量增大