某大中型企业采用Oracle数据库建立一个经济信息统计方面的大型数据库应用系统。尽管配置了比较良好的硬件和网络环境,但该数据库应用系统实施后的整体性能表现较差。特别是随着业务量与信息量的迅速扩大,数据库系统的存取速度显著减慢,存储效率也明显下降。
该企业通过反复实践与摸索,并邀请数据库专家一起会诊,认为可以从以下4个方面进一步优化数据库应用系统。
(1)由于数据库应用中最主要的查询与修改数据操作大多需通过I/O来完成,因此需要通过调整服务器配置(即对硬件设备进行升级)、操作系统配置与数据库管理系统的有关参数,优化系统的I/O性能,尤其是改进磁盘I/O的效率与性能。
(2)优化“索引”的建立与使用机制,尽可能提高数据查询的速度或效率。
(3)合理使用聚类(Culster),改进查询响应时间和系统的综合性能。其中,“聚类”是指把单独组织的,但在逻辑上经常需要连接的,较为稳定的几个基本表聚集在一起(在物理上实现邻近存放),可以显著减少数据的搜索时间,从而提高性能。
(4)对应用系统中使用的SQL语句进行调优,针对每条SQL语句都建立对应的索引等。
(1)在该企业所邀请的数据库专家会诊意见中,针对每条SQL语句都建立索引的建议是否合适请简要说明理由。
(2)结合你的系统架构设计经验,请列举出4条SQL语句优化的基本策略。
参考答案:(1)不适当,理由如下。
①如果建立索引不当,数据库管理系统将不利用已经建立的索引,而采取全表扫描。
②当更新操作成为系统瓶颈时,因为每次更新操作会重建表的索引,则需要考虑删除某些索引。
③应该针对不同应用情况选择适当的索引类型。例如,如果经常使用范围查询,则B树索引比散列索引更加高效。
④应该将有利于大多数据查询和更新的索引设为聚类索引。
⑤需要对建立的索引进行实际的测试,因为索引的使用是由数据库管理系统(数据库优化器)决定的。
(2)SOL语句优化的常见策略如下(包含但不限于以下内容,列举出其中5个小点即可,每小点1分)。
①建立物化视图或尽可能减少多表查询。
②以不相干子查询替代相干子查询。
③只检索需要的列。
④用带IN的条件子句等价替换OR子句。
⑤经常提交COMMIT,以尽早释放锁。
⑥避免嵌套的游标(Cursor)和多重循环等
解析:在该企业所邀请的数据库专家会诊意见中,针对每条SQL语句都建立索引的建议是不适当的。通常情况下,应针对查询语句,建立适当的索引以提高查询效率。但是索引调整时还需要考虑以下原则。
(1)如果更新操作成为系统瓶颈(因为每次更新操作会重建表的索引),则需要考虑删除某些索引。
(2)应该针对不同应用情况选择适当的索引类型。例如,如果经常使用范围查询,则B树索引比散列索引更加高效。
(3)将有利于大多数据查询和更新的索引设为聚类(Culster)索引。
同时需要对建立的索引进行实际的测试,因为索引的使用是由数据库管理系统(数据库优化器)决定的。如果建立索引不当,数据库管理系统将不利用已经建立的索引,而采取全表扫描。
SQL语句优化在信息系统调优中所占比例较大。通常情况下,一个信息系统中不同SQL语句的数目往往在200~400条,在优化时,需要对每条SQL语句的性能进行测量,对性能表现不佳的SQL语句进行调整。当前也已经出现了专门的SQL语句优化的工具,可以辅助开发人员。SQL语句优化的常见策略如下。
(1)优化相应的表连接,建立物化视图或尽可能减少多表查询。
(2)以不相干子查询替代相干子查询,即优化嵌套子查询。
(3)只检索需要的列,无须将表中所有的列全部检索,即避免全表的反复查询。
(4)用带IN的条件子句等价替换OR子句。
(5)避免嵌套的游标(Cursor)和多重循环。
(6)经常提交COMMIT,以尽早释放锁等。
注意,对于不同类型的应用系统,在数据库操作中,可采用的优化方法也有所不同。