实验六:数据库监视与性能优化试验
实验目的:
理解和掌握数据库查询性能调优的原理和方法
实验内容:
1.学会使用Explain命令分析查询执行计划、利用索引优化查询性能 2.理解和掌握数据库规范化设计对查询性能的影响 3.针对给定的数据库模式,设计不同的实例验证查询性能优化效果
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈
使用方式如下: EXPLAIN +SQL语句
通过EXPLAIN,我们可以分析出以下结果: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 实验重点与难点
实验重点:
利用索引优化查询性能、优化SQL语句
实验难点:
数据库模式规范化设计对查询性能的影响
实验过程:
1.使用EXPLAIN命令查看查询执行计划
2.利用索引优化查询性能 建立索引,优化SQL查询性能,比较在Part表的Name字段有索引和无索引时,两种执行计划有何异同?
3 优化SQL语句 (1)IN与Exists查询 (2)尽可能使用不相关子查询,避免使用相关查询。不相关子查询一般比相关子查询效率要高。在可能的情况下,改写相关子查询为不相关子查询。 查找这样的订单,总价大于顾客所购商品的平均总价 比较两种执行计划,并实际测试执行性能,哪种执行计划好? 相关子查询: 不相关子查询: 4. 数据库模式规范化设计对查询性能的影响
分析Sales模式中是否存在不规范化的设计?该设计在海量数据的情况下查询效率如何?如何在设计上进一步提高海量数据的查询效率? 第三范式在一定程度上减少了不必要的数据冗余,提高了数据库的查询效率,但是如果数据量大且存在大量联合查询的时候,第三范式设计有可能会影响查询效率。
Sales模式中可能存在的不规范的设计如下
- 使用EXPLAIN命令查看查询执行计划
2.利用索引优化查询性能 建立索引,优化SQL查询性能,比较在Part表的Name字段有索引和无索引时,两种执行计划有何异同?
3 优化SQL语句 (1)IN与Exists查询
Exists查询:
(2).相关子查询
不相关子查询:
查询所有购物总金额大于20万的客户编号及其购物总金额:
如果不用Totalprice字段, SQL查询语句则为:
查询所有购物零售总金额(折扣和加税之前的价格,即extendedprice)大于1万的订单对应的客户编号及金额:
如果不使用extendedprice , SQL查询则为:
|