第 6 章 物理数据库设计
创建和删除索引
要求:
- 创建
idx_demo数据库,并使用该数据库 - 如无特别说明,本章所有练习均在
idx_demo数据库中完成 - 创建 dept 表,并隐式创建主键索引
dept_id和唯一索引dept_name,表的属性如下dept_id, int, auto_incrementdept_name, varchar(20)
- 查询 dept 表的索引,验证主键索引和唯一索引创建成功
- 创建 emp 表,并隐式创建主键索引
emp_id和外键索引dept_id,表的属性如下emp_id, int, auto_incrementemp_name, varchar(20)dept_id, int
- 查询 emp 表的索引,验证主键索引和外键索引创建成功
- book 表的属性如下
book_id, intbook_name, varchar(100)authors varchar(100)info varchar(100)comment varchar(100)year_publication datetime
- 创建
book表,同时为book_name属性显示创建普通索引,验证索引是否创建成功 - 创建
book1表,同时为comment属性显示创建唯一索引,验证索引是否创建成功 - 创建
book2表,同时为book_id属性显示创建主键索引,验证索引是否创建成功 - 创建
book3表,同时为book_name属性显示创建单列索引,验证索引是否创建成功 - 创建
book4表,同时为book_id, book_name, info属性显示创建联合索引,验证索引是否创建成功 - 创建
book5表,然后修改book5表,并为comment属性创建普通索引,为book_name属性创建普通索,为book_id, book_name, info属性创建联合索引,验证索引是否创建成功 - 创建
book6表,然后,为comment属性创建普通索引,为book_name属性创建普通索,为book_id, book_name, info属性创建联合索引,验证索引是否创建成功 - 删除
book2的主键,查看book2的主键索引是否自动删除 - 修改
book5表,删除comment属性的普通索引,检查索引是否删除成功 - 直接删除
book5表的唯一索引,检查索引是否删除成功 - 删除
book5表的book_id字段,检查联合索引的变化 - 删除
book5表的book_name字段,检查联合索引的变化 - 删除
book5表的info字段,检查联合索引是否存在
使用索引
准备实验环境
- 创建表
abc,属性如下,id 是主键id int(11) not null auto_incrementtag char(8) not nulla int not nullb int not nullc int not null
- 创建表
abc_idx,属性与表abc相同,id 是主键 - 表
abc_idx有 a,b,c 和 b,c 两个联合索引,tag 普通索引,tag(4) 前缀索引 - 编写存储过程
insertData,向abc和abc_idx插入一百万条记录,数据规则如下tag = rpad(id, 8, '-')a = id % 10000b = id % 1000c = id % 100abc和abc_idx表的数据相同
- 调用
insertData存储过程,向abc和abc_idx表插入数据 - 注意,因为数据量比较大,存储过程执行的时间可能比较长,需要耐心等待
使用索引
- 检查
index_demo数据库中有哪些表,是否有abc和abc_idx表 - 查看
abc和abc_idx表的结构 - 查看
abc和abc_idx表的记录数量 - 查看
abc和abc_idx表的索引 - 在
abc表中查询满足条件a=10的记录,记录查询执行的时长 - 在
abc_idx表中查询满足条件a=10的记录,记录查询执行的时长 - 对上面的两个查询,用查询分析器分析,查看以下三个参数:
- 查询类型
- 使用的索引
- 可能扫描的记录数量
设计索引
- 下面的操作分别在
abc和abc_idx表上完成 - 查询
id=1234的元组。查询时长有何区别,id 属性有何特点,通过 explain 分析用到的索引 - 查询
a=1234的元组。查询时长有何区别,a 属性有何特点,通过 explain 分析用到的索引 - 统计 b 取值和相同 b 的数量。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 统计 a=1000 条件下,b 取值和相同 b 的数量。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 对于 tag=‘4444----’ 的记录,更新 b = b + 10000。查询时长有何区别,tag 属性有何特点,通过 explain 分析用到的索引
- 查询不同 b 的数量。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 对前一万条记录自连接,连接条件是 b 字段等值。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 查询 tag 字段以 1234 开头的记录。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 计算 tag 前缀长度为 5, 6, 7, 8 的选择度,思考 tag 前缀长度选多少最好
- 计算每个字段的区分度,查询 tag=‘1234----’ 的记录。查询时长有何区别,tag 属性有何特点,通过 explain 分析用到的索引
- 查询 b 取值 123~234 的记录。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 查询 b 取值 223~234 的记录。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引
- 查询 b=123 且 c=23 的记录。查询时长有何区别,b 属性有何特点,通过 explain 分析用到的索引