
1) 【一句话结论】存储招聘信息时,数据库表需包含岗位名称、单位类型、发布时间(非空)、关键词等核心字段,并按查询需求设计索引(如B树索引按发布时间/单位类型,全文索引按关键词),同时考虑字段非空约束(如发布时间必填)和主键全局唯一性(如UUID),以保障数据完整性和查询效率。
2) 【原理/概念讲解】表结构设计需以业务需求为核心,字段要覆盖招聘信息的核心要素:岗位名称标识具体岗位(如“初中历史教师”),单位类型区分机关/事业单位,发布时间是时间维度(如“1月第三期”,必须非空,否则无法按时间筛选),关键词用于全文检索。索引的作用类似书籍的“目录”,通过树形结构(如B树)快速定位数据,避免全表扫描。例如,B树索引适合等值或范围查询(如按时间筛选),全文索引适合文本内容搜索(如关键词检索)。主键需保证全局唯一,在分布式系统中自增ID可能冲突,建议用UUID或全局ID生成器。
3) 【对比与适用场景】
| 索引类型 | 定义 | 特性 | 适合场景 | 注意点 |
|---|---|---|---|---|
| B树索引(普通索引) | 树形结构,支持等值/范围查询 | 支持高效范围扫描,维护成本中等 | 按发布时间、单位类型筛选(非全文) | 需维护,占用存储空间 |
| 全文索引 | 专门用于文本内容搜索 | 优化文本匹配,支持模糊查询 | 关键词检索(如“初中历史教师”) | 需数据库支持(如MySQL FULLTEXT),存储空间较大 |
| 唯一索引 | 确保列值唯一 | 防止重复值插入 | 岗位名称(假设唯一,避免重复) | 不能有重复值,插入失败时需处理 |
| 分区索引(按时间分区) | 按分区键对表进行逻辑分区 | 减少查询扫描范围 | 大数据量时按发布时间分区 | 分区键需与查询条件匹配 |
4) 【示例】
表结构设计(以MySQL为例,考虑非空和主键全局唯一):
CREATE TABLE job_recruitments (
id CHAR(36) PRIMARY KEY, -- 主键,全局唯一UUID(避免分布式冲突)
job_name VARCHAR(100) NOT NULL, -- 岗位名称,非空
unit_type VARCHAR(50) NOT NULL, -- 单位类型(如“国家机关”“事业单位”),非空
publish_time DATETIME NOT NULL, -- 发布时间,非空(业务必须)
keywords TEXT, -- 关键词,用于全文检索
-- 其他字段如地区、联系方式等可补充
);
创建索引:
-- 按发布时间创建索引(加速按时间筛选)
CREATE INDEX idx_publish_time ON job_recruitments(publish_time);
-- 按单位类型创建索引(加速按单位类型筛选)
CREATE INDEX idx_unit_type ON job_recruitments(unit_type);
-- 关键词全文索引(支持文本搜索)
CREATE FULLTEXT INDEX idx_keywords ON job_recruitments(keywords);
-- 复合索引(按单位类型+发布时间组合查询)
CREATE INDEX idx_unit_type_publish_time ON job_recruitments(unit_type, publish_time);
5) 【面试口播版答案】(约90秒)
“面试官您好,针对存储‘1月第三期’国家机关、事业单位招聘信息,表结构设计需包含核心字段:岗位名称(标识具体岗位)、单位类型(区分机关/事业单位)、发布时间(时间维度,必须非空,否则无法按时间筛选)、关键词(用于全文检索)。为提高查询效率,针对常用查询条件创建索引:比如按发布时间筛选,创建B树索引idx_publish_time;按单位类型筛选,创建idx_unit_type;关键词检索用全文索引(如idx_keywords);同时为按‘单位类型’和‘发布时间’组合查询创建复合索引(顺序为unit_type在前,publish_time在后),优化组合查询效率。主键选择全局唯一的UUID(避免分布式系统ID冲突),字段添加非空约束(如发布时间必填),确保数据完整性。这样设计后,数据库能快速定位数据,避免全表扫描,提升查询速度。”
6) 【追问清单】
7) 【常见坑/雷区】