SQL - 数据库调整

成为数据库专家或专家数据库管理员需要时间.这一切都伴随着各种数据库设计和良好培训的丰富经验.

但是以下列表可能对初学者有帮助,以获得良好的数据库性能 :

  • 在RDBMS Concepts章节中使用本教程中介绍的3BNF数据库设计.

  • 避免数字到字符的转换,因为数字和字符的比较不同并导致性能降级.

  • 使用SELECT语句时,只获取所需的任何信息和避免在SELECT查询中使用*,因为它会不必要地加载系统.

  • 在经常搜索操作的所有表上仔细创建索引.避免在搜索操作次数较少且插入和更新操作次数较多的表上使用索引.

  • 当列中的列出现时会发生全表扫描WHERE子句没有与之关联的索引.您可以通过在SQL语句的WHERE子句中用作条件的列创建索引来避免全表扫描.

  • 要小心具有实数和日期/时间值的相等运算符.这两者之间的差异很小,但并不是很明显,但却无法完全匹配,从而阻止了查询返回行.

  • 使用模式匹配明智. LIKE COL%是一个有效的WHERE条件,将返回的集合减少为仅包含以字符串COL开头的数据的记录.但是,COL%Y不会进一步减少返回的结果集,因为%Y无法有效评估.进行评估的努力太大而无法考虑.在这种情况下,使用COL%,但%Y被丢弃.出于同样的原因,前导通配符%COL有效地阻止了整个过滤器的使用.

  • 微调查询查询结构的SQL查询(和子语句,SQL语法,用于发现您是否设计了表以支持快速数据操作并以最佳方式编写查询,从而允许DBMS有效地操作数据.

  • 对于定期执行的查询,请尝试使用过程.过程是一组潜在的SQL语句.程序由数据库引擎编译然后执行.与SQL语句不同,数据库引擎在执行之前无需优化过程.

  • 尽可能避免在查询中使用逻辑运算符OR.或者不可避免地减慢几乎任何查询对大量表的查询.

  • 您可以通过删除索引来优化批量数据加载.想象一下包含数千行的历史表.该历史表也可能具有一个或多个索引.当您考虑索引时,通常会考虑更快的表访问,但在批量加载的情况下,您可以通过删除索引来获益.

  • 执行批处理事务时,在创建相当数量的记录后执行COMMIT,而不是在每次创建记录后创建它们.

  • 计划对数据库进行碎片整理定期,即使这样做意味着开发每周例程.

内置调整工具

Oracle有很多用于管理SQL语句性能的工具,但其中有两种非常受欢迎.这两个工具是 :

  • 解释计划 : 工具标识执行SQL语句时将采用的访问路径.

  • tkprof : 测量SQL语句处理的每个阶段所经过的时间的性能.

如果您想简单地测量查询的已用时间在Oracle中,您可以使用SQL * Plus命令SET TIMING ON.

检查您的RDBMS文档,了解有关上述工具和对数据库进行碎片整理的更多详细信息.