实验7.2 索引的测试

更新于 2026年10月10日 版权声明
实验7.2 索引的测试

【实验目的】

①掌握如何创建索引才能提高查询速度。

②掌握获得执行计划的方法。

【实验内容】

新建测试数据表,建立存储过程插入数据到测试表,比较索引建立前后的查询速度以及分析索引与查询语句的关系。

【实验步骤】

使用SQL新建测试数据表test,建立存储过程批量插入数据到测试表,比较未建立索引和在不同列上建立索引后的查询语句的查询速度,分别获得执行计划并分析索引和查询语句的关系。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句并执行,创建测试索引的数据表test。

CREATE TABLE test(
id INT,
name VARCHAR(20),
gender CHAR(6),
email VARCHAR(50)
);

③再次创建一个查询窗口,输入以下SQL语句,创建批量插入数据的存储过程,实现批量插入记录。

DELIMITER $$
CREATE PROCEDURE auto_insert1()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE(i<=50000)DO
INSERT INTO test VALUES(i,CONCAT('e',i),'male',CONCAT('e',i,'@oldboy'));
SET i=i+1;
END WHILE;
END$$
DELIMITER ;

④执行上面的语句,完成创建后刷新数据库可以看到新建立的存储过程,如图7.5所示。

图示

图7.5 新建存储过程批量插入数据

⑤新建查询窗口,输入下面的SQL语句调用存储过程,由于插入数据量较大,存储过程执行结束大概要花费将近60秒的时间。

CALL auto_insert1();

⑥查询test表的数据,在查询窗口输入SQL语句并执行,如图7.6所示,表test的数据共有50 000行。

图示

图7.6 执行存储过程后查询test表数据

⑦在没有索引的前提下测试查询速度。查询name为'e1000'的元组,输入以下SQL语句并执行,结果如图7.7所示,记下语句的执行时间。

SELECT * FROM test WHERE name='e1000';(https://www.daowen.com)

图示

图7.7 没有索引的查询

⑧使用EXPLAIN语句获得上面查询语句的执行计划,输入以下SQL语句并执行,结果如图7.8所示。

EXPLAIN SELECT * FROM test WHERE name='e1000';

图示

图7.8 使用EXPLAIN语句获得查询语句的执行计划

⑨在id列上加上索引并测试查询速度。输入以下SQL语句并执行,结果如图7.9所示,发现以id为数据项建立索引后,查询时,发现查询速度并没有加快。再次运行步骤⑦的EXPLAIN语句获得该查询语句的执行计划,发现执行结果和图7.8一样,说明该查询语句执行时并没有使用到idx索引,仍然是采用表扫描的方式完成的查询。

CREATE INDEX idx ON test(id);
SELECT * FROM test WHERE name='e1000';

图示

图7.9 在id列建立索引后的查询

⑩在name列上创建索引并测试查询速度。输入以下SQL语句,选择第二条查询语句先执行,执行时间为0.031秒,再选择创建索引语句执行,成功创建以name为索引项的索引namex,再次选择查询语句执行,执行时间为0.000秒,说明查询速度已经提高,结果如图7.10所示。运行步骤⑦的EXPLAIN语句获得该查询语句的执行计划,执行结果如图7.11所示。查看key列,说明该查询语句执行时使用到namex索引,从而大大提高了查询速度。

CREATE INDEX namex ON test(name);
SELECT * FROM test WHERE name='e1000';

图示

图7.10 在name列建立索引及查询

图示

图7.11 使用EXPLAIN语句再次获得查询语句的执行计划

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)