《数据库系统实验》
实验报告
题目 | 实验7——数据库存储和优化 |
一、实验环境:
1、操作系统:Windows 11 22H2;
2、DBMS :mysql 8.0 CE;
二、实验内容与完成情况
7.3 索引的使用效果测试。参照实验示例上机操作,增大test表的记录到8万条或更多,重做实验。多次记录耗时,并作分析比较。
在教学管理系统(jxgl)中创建表test,并插入8万条记录。
创建表:
Create table test (id int unique AUTO_INCREMENT, rq datetime null, srq varchar (20) null,
hh smallint null, mm smallint null, ss smallint null, num numeric (12,3), primary key (id))
AUTO_INCREMENT= 1 engine=MyISAM;
创建存储过程生成表中数据:
DELIMITER //
CREATE PROCEDURE p1()
begin
set @i = 1;
WHILE @i <= 80000 do
INSERT INTO TEST (RQ, SRQ, HH, MM, SS, NUM)
VALUES (NOW() ,NOW() , HOUR(NOW()),
MINUTE (NOW()), SECOND (NOW()), RAND (@i) * 100);
set @i = @i + 1;
END WHILE;
End//
调用存储过程:
call p1//
DELIMITER;
7.3.1 未建索引时按以下步骤操作
(1)单记录插入(约16ms)
SQL语言:
Select @i :=max(id) from test;
INSERT INTO TEST (RQ, SRQ, HH, MM, SS, NUM)
VALUES (NOW (), NOW (), HOUR (NOW ()),
MINUTE (NOW ()), SECOND (NOW()), RAND (@i) * 100);
结果:
(2)查询所有记录,按id排序(约1031ms)
查询之前,我们应该打开Edit->Preferences,关闭limit rows 选项。
SQL语言:
Select * from test order by id;
结果:
(3) 查询所有记录,按mm排序(约1031ms)
SQL语言:
Select * from test order by mm;
结果:
(4) 单记录查询(约0ms)
SQL语言:
Select id from test where id= 51;
结果:
7.3.2 对test表的mm字段建立非聚集索引
(1) 建立索引耗时(约2531ms)
SQL语言:
Create index indexname1 on test(mm);
结果:
(2) 单记录插入(约0ms),插入命令同“单记录插入”。
结果:
(3) 查询所有记录,按id排序(约985ms),查询命令同“查询按id排序”。
结果:
(4) 查询所有记录,按mm排序(约1000ms),查询命令同“查询按mm排序”。
结果:
(5) 单记录查询(约0ms),查询命令同“单记录查询”。
结果:
(6)删除索引(约2375ms)。
SQL语言:
Drop index indexname1 on test;
结果: