BRIN、列存与组合索引

共 66 题
#

1. BRIN 与 B-Tree 的取舍,写入性能 vs 查询精度?

A BRIN 索引小写入快但查询需扫块范围,B-Tree 精确但大,有序大表用 BRIN ✓ 正确答案
B BRIN 查询更精确
C B-Tree 索引更小
D BRIN 写入开销大于 B-Tree
#

2. BRIN 的极致空间效率,每个范围仅存 min/max,几百 KB 索引支撑 TB 级表?

A 每块范围只存 min/max,索引大小与块范围数成正比,可支撑 TB 级大表 ✓ 正确答案
B BRIN 存每个键
C BRIN 索引与行数成正比
D BRIN 空间效率低
#

3. BRIN 索引的 pages_per_range 参数调优?

A pages_per_range 不影响索引大小
B pages_per_range 越大越精确
C pages_per_range 固定 128 不可调
D pages_per_range 小则过滤精确但索引大,大则索引小但过滤粗,按有序性调整 ✓ 正确答案
#

4. BRIN(Block Range Index)的原理,块范围摘要,适合时序、地理空间等自然排序的大表?

A BRIN 无需块范围
B BRIN 存每个键
C BRIN 适合无序数据
D BRIN 按块范围存 min/max 摘要,适合物理有序的时序/地理空间大表 ✓ 正确答案
#

5. PostGIS 空间索引(R-Tree/GiST)的应用,最近邻查询、范围查询?

A 空间索引用 B-Tree
B GiST 用 MBR 组织几何对象,加速 ST_DWithin/ST_Intersects 范围与最近邻查询 ✓ 正确答案
C 空间查询无需索引
D 最近邻查询不用索引
#

6. 全文检索索引(GIN on tsvector)的实现原理与查询操作符?

A 全文用 B-Tree
B GIN 对 tsvector 建倒排索引,@@ 匹配 tsquery 执行全文查询 ✓ 正确答案
C tsvector 是数组
D 全文查询需全表扫描
#

7. BRIN 索引在监控数据、日志数据的应用?

A 日志查询需全表扫描
B 监控数据用 B-Tree 更优
C BRIN 不适合写入频繁
D 监控/日志按时间有序写入频繁,BRIN 小索引快写入适合时间范围查询 ✓ 正确答案
#

8. PostGIS 空间查询的 ST_DWithin 索引使用?

A ST_DWithin 无需索引
B ST_DWithin 总是全表扫描
C ST_DWithin 利用 GiST 索引先粗过滤再精确计算,需几何列直接参与且 SRID 一致 ✓ 正确答案
D ST_DWithin 与 SRID 无关
#

9. BRIN 索引的 min/max 存储?

A min/max 无过滤作用
B BRIN 存每个键的 min/max
C min/max 与行数成正比
D BRIN 为每个块范围存 min/max,查询据此跳过无关块范围 ✓ 正确答案
#

10. BRIN 索引的运维(vacuum)?

A VACUUM 不更新 BRIN
B BRIN 索引无需维护
C VACUUM 会更新 BRIN 块范围摘要,删除/更新后需 vacuum 保持过滤准确 ✓ 正确答案
D BRIN 摘要永不过时
#

11. PostGIS 的 ST_AsGeoJSON 输出?

A 与前端无关
B 只输出 WKT
C 把 PostGIS 几何转换为 GeoJSON 格式,供 Web 地图前端展示 ✓ 正确答案
D 只支持 2D
#

12. tsvector 的 GIN 索引?

A tsvector 是数值类型
B tsvector 用 B-Tree
C GIN 对 tsvector 建倒排索引,词→文档映射,@@ 匹配 tsquery 执行全文检索 ✓ 正确答案
D GIN 不支持全文
#

13. 全文检索的 GIN 索引创建?

A GIN 索引查询无需匹配
B 全文用 B-Tree 索引
C 用 CREATE INDEX ... USING gin 对 to_tsvector 表达式建倒排索引,查询需匹配表达式 ✓ 正确答案
D 全文索引无需建
#

14. MySQL InnoDB 的覆盖索引,非聚簇索引包含的列?

A 覆盖索引仍需回表
B 二级索引包含查询所需列(含主键)即覆盖,查询免回表 ✓ 正确答案
C 覆盖索引只含主键
D 覆盖索引与回表无关
#

15. PostgreSQL 的 INCLUDE 列与 B-Tree 索引的关系?

A INCLUDE 列加入索引但不参与排序,仅用于覆盖避免回表 ✓ 正确答案
B INCLUDE 列参与排序
C INCLUDE 列是索引键
D INCLUDE 列与 B-Tree 无关
#

16. 覆盖索引(Covering Index)的实现,包含所有查询列,避免回表?

A 覆盖索引只含一部分列
B 覆盖索引仍需回表
C 索引包含查询所需列即覆盖,MySQL 用复合索引、PG 用 INCLUDE,避免回表 ✓ 正确答案
D 覆盖索引增加回表
#

17. 部分索引的查询匹配条件,WHERE 子句必须包含索引定义的 WHERE?

A 部分索引与 WHERE 无关
B 部分索引查询无需匹配
C 部分索引索引所有行
D 查询 WHERE 必须能推导出索引过滤条件,否则优化器无法使用部分索引 ✓ 正确答案
#

18. CREATE INDEX ... WHERE 的部分索引语法?

A 部分索引索引所有行
B CREATE INDEX ... WHERE 只索引满足条件的行,索引更小更高效 ✓ 正确答案
C 部分索引无 WHERE
D 部分索引语法 MySQL 不支持
#

19. MySQL ICP 与覆盖索引的协同?

A 覆盖索引增加回表
B ICP 增加回表
C ICP 把过滤下推到索引层减少回表,覆盖索引免回表,二者协同优化查询 ✓ 正确答案
D ICP 与覆盖索引无关
#

20. MySQL 覆盖索引的限制?

A 覆盖索引无法覆盖大字段与 SELECT *,且增加索引体积,需权衡 ✓ 正确答案
B 覆盖索引可覆盖所有列
C 覆盖索引无需回表锁
D 覆盖索引不增加体积
#

21. PostgreSQL INCLUDE 子句的语法?

A INCLUDE 附加列不参与排序仅用于覆盖,实现 Index Only Scan 免回表 ✓ 正确答案
B INCLUDE 列参与排序
C INCLUDE 列是主键
D INCLUDE 只用于文本
#

22. 覆盖索引的 VARCHAR 列代价?

A 长字段应入覆盖索引
B VARCHAR 列不占空间
C VARCHAR 列入索引无影响
D VARCHAR 列占空间大,入覆盖索引增大体积与开销,长字段应避免 ✓ 正确答案
#

23. 部分索引与 OR 条件的兼容性?

A 部分索引对所有 OR 查询生效
B OR 条件总能用部分索引
C 查询条件需蕴含索引过滤条件,OR 条件可能扩大范围导致无法使用部分索引 ✓ 正确答案
D OR 条件与部分索引无关
#

24. 覆盖索引(Covering Index)在排序与分组上的额外收益,免回表如何加速 ORDER BY/GROUP BY,与索引下推(ICP)的分工是什么?

A 覆盖索引与排序无关
B 覆盖索引不加速排序
C ICP 消除回表
D 覆盖索引免回表且索引有序,加速 ORDER BY/GROUP BY,ICP 主要优化过滤下推 ✓ 正确答案
#

25. ClickHouse MergeTree 的列存实现,物理按列排序存储?

A MergeTree 按列存储并按排序键物理排序,支持列裁剪、压缩与高效范围查询 ✓ 正确答案
B MergeTree 是行存
C MergeTree 无排序
D MergeTree 只适合点查
#

26. PostgreSQL 列存扩展(citus_columnar)的应用?

A citus_columnar 只用于点查
B citus_columnar 是行存
C citus_columnar 适合大量写入
D citus_columnar 是 PG 列存扩展,列式存储+压缩加速分析,适合读多写少 ✓ 正确答案
#

27. 倒排索引(Inverted Index)的原理,从词到文档的映射?

A 倒排索引映射文档到词
B 倒排索引映射词到文档列表,查询按词定位文档,适合全文与多值类型 ✓ 正确答案
C 倒排索引需扫描所有文档
D 倒排索引适合单值列
#

28. 列存 vs 行存的取舍,OLAP 列存高效聚合,OLTP 行存高效单行?

A 两者相同
B 列存适合点查
C 行存适合聚合
D 行存适合单行点查与更新(OLTP),列存适合聚合与压缩(OLAP) ✓ 正确答案
#

29. 列存(Columnar Storage)的原理,按列存储、压缩、向量化执行?

A 列存按行存储
B 列存按列存储、支持列裁剪与高压缩、向量化执行,适合 OLAP 聚合 ✓ 正确答案
C 列存压缩率低
D 列存适合点查
#

30. 列存索引(MinMax、Bloom Filter)的辅助索引?

A MinMax 适合等值
B 辅助索引与列存无关
C MinMax 索引按块存 min/max、Bloom Filter 判断块内是否存在值,都用于跳过无关块 ✓ 正确答案
D Bloom Filter 适合范围
#

31. ClickHouse 的 ReplacingMergeTree?

A 实时去重
B 在 merge 时按排序键去重保留最后版本,查询可用 FINAL 强制去重 ✓ 正确答案
C 不处理重复
D 与 MergeTree 相同
#

32. 索引列顺序的优化器评估,CBO 的列序试探?

A 列序无影响
B 列序由优化器决定
C 优化器不依赖统计
D CBO 用统计信息评估已建索引列序的成本,等值/高选择性列放前 ✓ 正确答案
#

33. 组合索引的代价,写入路径维护多列、B-Tree 深度?

A 组合索引体积更小
B 组合索引无写入代价
C 组合索引提升查询但增加写入维护多列与索引体积的成本 ✓ 正确答案
D 组合索引减少写入
#

34. 组合索引的排序利用,ORDER BY a, b 命中 (a, b) 索引?

A 任意 ORDER BY 都命中
B ORDER BY 与索引列序一致(最左前缀+方向)才能利用索引免排序 ✓ 正确答案
C ORDER BY b 命中 (a,b)
D 索引不参与排序
#

35. 组合索引(Composite Index)的列序选择,高基数在前 vs 等值在前?

A 列序无关紧要
B 范围列在前
C 低基数在前
D 等值列在前、高基数在前、范围列在后,列序决定索引命中与过滤效率 ✓ 正确答案
#

36. 覆盖索引与组合索引的协同,包含 SELECT、WHERE、ORDER BY 列?

A 组合索引不能覆盖
B 覆盖索引与组合索引无关
C 组合索引包含 WHERE/ORDER BY/SELECT 列,满足过滤、排序与覆盖,免回表免排序 ✓ 正确答案
D 覆盖索引不参与排序
#

37. MySQL InnoDB 的组合索引与聚簇存储?

A 组合索引是聚簇索引
B 组合索引是二级索引,叶节点存组合键+主键,查询可能回表,遵循最左前缀 ✓ 正确答案
C 组合索引无需回表
D 一张表可有多个聚簇索引
#

38. MySQL ICP 与组合索引?

A ICP 只用于单列索引
B ICP 增加回表
C ICP 把组合索引的过滤条件下推到索引层,减少回表 ✓ 正确答案
D ICP 与组合索引无关
#

39. PostgreSQL 多列索引与 B-Tree?

A 多列索引无视列序
B 多列索引默认 B-Tree,按列序排序,遵循最左前缀 ✓ 正确答案
C 多列索引不遵循最左前缀
D 多列索引不能排序
#

40. 组合索引与 DISTINCT?

A 组合索引不影响 DISTINCT
B DISTINCT 总是用索引
C DISTINCT 列与索引列序一致时可利用索引有序免去重排序 ✓ 正确答案
D DISTINCT 需全表扫描
#

41. 组合索引与 GROUP BY?

A 组合索引不影响 GROUP BY
B GROUP BY 总是用索引
C GROUP BY 列与索引列序一致时利用索引有序分组,免排序/哈希 ✓ 正确答案
D GROUP BY 需全表扫描
#

42. 组合索引中的 NULL 处理,NULL 前置列为何可能使索引失效,如何用 IS NOT DISTINCT FROM 或部分索引改写查询以命中索引?

A 部分索引无法处理 NULL
B = NULL 能命中索引
C NULL 前置列不影响索引
D NULL 比较用 IS NOT DISTINCT FROM 或 IS NULL 改写,或用部分索引过滤 NULL 以命中索引 ✓ 正确答案
#

43. 组合索引与 OR 条件?

A OR 条件难用单个组合索引,可能需索引合并或改写为 UNION ALL ✓ 正确答案
B OR 条件总能利用组合索引
C 组合索引对 OR 无影响
D OR 条件总是走索引
#

44. 组合索引与 ORDER BY?

A 组合索引不参与排序
B 任意 ORDER BY 都命中
C ORDER BY 与索引列序一致(最左前缀+方向)时利用索引免排序 ✓ 正确答案
D ORDER BY 总是需 filesort
#

45. CHECK 约束与索引的关系,CHECK 不需要索引?

A CHECK 约束自动建索引
B CHECK 约束在写入时验证值,不建索引也不需要索引 ✓ 正确答案
C CHECK 约束需要索引
D CHECK 约束是索引
#

46. 主键索引与聚簇索引的关系(InnoDB)?

A InnoDB 主键即聚簇索引,数据按主键存储,一张表一个聚簇索引 ✓ 正确答案
B 主键索引与聚簇索引无关
C 一张表可有多个聚簇索引
D 二级索引是聚簇索引
#

47. 主键约束的索引类型,B-Tree、Hash 还是其他?

A 主键用 GIN 索引
B 主键用 Hash 索引
C 主键默认用 B-Tree 索引,支持等值/范围/排序/唯一,Hash 不适合主键 ✓ 正确答案
D 主键无索引
#

48. 外键约束是否自动创建索引,MySQL InnoDB vs PostgreSQL?

A 外键无需索引
B 两者都自动
C 两者都不自动
D MySQL InnoDB 自动为外键建索引,PostgreSQL 需手动建 ✓ 正确答案
#

49. EXCLUSION 约束(PostgreSQL)的应用?

A 用 GiST 表达跨行约束如时间区间不重叠,适合预订/资源占用场景 ✓ 正确答案
B 只支持等值
C 用 B-Tree 实现
D 与 CHECK 相同
#

50. MySQL InnoDB 外键索引?

A 外键索引需手动
B 外键无需索引
C InnoDB 不自动建外键索引
D InnoDB 自动为外键列建索引,支持约束检查与级联 ✓ 正确答案
#

51. PostgreSQL EXCLUDE 约束与 GIST?

A EXCLUDE 只能等值
B EXCLUDE 用 B-Tree
C EXCLUDE 与 GiST 无关
D EXCLUDE 约束底层用 GiST 索引,支持重叠/包含操作符表达区间不重叠 ✓ 正确答案
#

52. PostgreSQL 外键索引?

A 外键索引自动维护
B PG 自动建外键索引
C 外键无需索引
D PG 外键不自动建索引,需手动建以提升约束检查与级联性能 ✓ 正确答案
#

53. 唯一索引的 NULL 行为?

A NULL 行为一致
B 所有数据库允许多个 NULL
C 唯一索引不允许 NULL
D PG/MySQL 允许多个 NULL,SQL Server 只允许一个,PG 15+ 可配置 NULLS NOT DISTINCT ✓ 正确答案
#

54. 唯一索引的 WHERE 子句?

A 部分唯一索引不支持
B 唯一索引不能加 WHERE
C WHERE 使唯一索引全表唯一
D 部分唯一索引用 WHERE 限定唯一范围,适合活跃用户或软删除场景 ✓ 正确答案
#

55. MySQL InnoDB 自适应哈希索引(AHI)的原理,内存中自动构建的 hash 索引?

A AHI 持久化到磁盘
B AHI 需手动创建
C AHI 自动为高频 B+Tree 页构建内存哈希,加速等值查询,占用 buffer pool ✓ 正确答案
D AHI 只用于范围查询
#

56. PostgreSQL 中等价于 AHI 的实现?

A PG 无缓存
B PG 有 AHI
C PG 无 AHI,用 shared_buffers 页面缓存与高效 B-Tree,也可用显式 Hash 索引 ✓ 正确答案
D PG 只能全表扫描
#

57. AHI 与 B-Tree 索引的协同?

A AHI 支持范围查询
B AHI 替代 B-Tree
C AHI 是 B-Tree 的内存加速层,加速等值查询,范围查询仍走 B-Tree ✓ 正确答案
D 两者独立
#

58. 全文检索的字典(dictionary)?

A 字典与停用词无关
B 字典只做小写化
C 字典不影响检索
D 字典做停用词过滤、词干化、同义词映射,规范化文本提升检索质量 ✓ 正确答案
#

59. 覆盖索引中 INCLUDE 列与普通索引键列在存储占用与查询语义上的差异?

A INCLUDE 列是索引键
B INCLUDE 列参与排序
C INCLUDE 列仅叶节点存储、不参与排序,省空间;键列参与搜索排序占用更大 ✓ 正确答案
D 两者占用相同
#

60. 列存的压缩(Run-Length、Dictionary、Delta)效果?

A RLE 压缩连续相同值、字典编码映射重复值、Delta 存差值,列存同列相似度高压缩率高 ✓ 正确答案
B 列存无法压缩
C RLE 适合高基数
D Delta 适合随机值
#

61. AHI 的开启与关闭(innodb_adaptive_hash_index)?

A AHI 不占内存
B AHI 默认关闭
C AHI 无法关闭
D innodb_adaptive_hash_index 默认开启,等值查询少或内存紧张时可关闭 ✓ 正确答案
#

62. AHI 与 Buffer Pool 的关系?

A AHI 存储在 Buffer Pool 中,占用缓冲内存,与数据页缓存共享空间 ✓ 正确答案
B AHI 在磁盘
C AHI 不占内存
D AHI 与 Buffer Pool 无关
#

63. PostGIS 的 SRID 转换?

A ST_Transform 转换坐标系,SRID 标识坐标系,影响距离与显示 ✓ 正确答案
B SRID 与坐标系无关
C 距离计算与 SRID 无关
D 所有几何同 SRID
#

64. 列存的数据加载(ETL)?

A 列存不适合 ETL
B 列存适合单行更新
C 列存随机写快
D 列存适合批量追加加载,单行更新慢,ETL 用批量导入 ✓ 正确答案
#

65. CHECK 约束的执行时机?

A CHECK 延迟到事务提交
B CHECK 只在查询时验证
C CHECK 不验证写入
D CHECK 在 INSERT/UPDATE 时即时验证,NOT VALID 可跳过已有数据验证 ✓ 正确答案
#

66. 唯一约束 vs 唯一索引?

A 唯一索引不能强制唯一
B 唯一约束不建索引
C 两者底层都是唯一索引,唯一约束有约束语义、可用作外键引用,管理方式不同 ✓ 正确答案
D 两者完全不同