# 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 与覆盖索引无关
# 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 相同
# 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 一张表可有多个聚簇索引
# 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 相同
# 51. PostgreSQL EXCLUDE 约束与 GIST? A EXCLUDE 只能等值 B EXCLUDE 用 B-Tree C EXCLUDE 与 GiST 无关 D EXCLUDE 约束底层用 GiST 索引,支持重叠/包含操作符表达区间不重叠 ✓ 正确答案
# 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 两者独立
# 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
# 65. CHECK 约束的执行时机? A CHECK 延迟到事务提交 B CHECK 只在查询时验证 C CHECK 不验证写入 D CHECK 在 INSERT/UPDATE 时即时验证,NOT VALID 可跳过已有数据验证 ✓ 正确答案