📜  SQL-数据库调优

📅  最后修改于: 2020-12-29 04:44:55             🧑  作者: Mango


成为数据库专家或专家数据库管理员需要花费时间。所有这些都具有在各种数据库设计和良好培训方面的大量经验。

但是以下列表可能对初学者有很好的数据库性能帮助-

  • 使用本教程“ RDBMS概念”一章中介绍的3BNF数据库设计。

  • 避免数字到字符的转换,因为数字和字符的比较会不同,从而导致性能下降。

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

  • 在经常执行搜索操作的所有表上仔细创建索引。避免在表上建立索引,在这些表上搜索操作数量较少,插入和更新操作数量较多。

  • 当WHERE子句中的列没有与之关联的索引时,将发生全表扫描。通过在用作SQL语句的WHERE子句中的条件的列上创建索引,可以避免全表扫描。

  • 请注意带有实数和日期/时间值的相等运算符。两者都可能有细微的差别,这些细微差别看起来并不明显,但却无法实现完全匹配,因此可以防止查询返回行。

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

  • 细调您的SQL查询,检查查询(和子查询)的结构,SQL语法,以发现您是否设计了表来支持快速数据操作并以最佳方式编写了查询,从而使DBMS可以有效地操作数据。

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

  • 尽可能避免在查询中使用逻辑运算符OR。或不可避免地会减慢对大量表的查询速度。

  • 您可以通过删除索引来优化批量数据加载。想象一下具有数千行的历史记录表。该历史表也可能具有一个或多个索引。当您想到索引时,通常会想到更快的表访问,但是在批量加载的情况下,删除索引可以使您受益。

  • 执行批处理事务时,在创建大量记录之后执行COMMIT,而不是在每次创建记录后都创建它们。

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

内置调整工具

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

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

  • tkprof-通过在SQL语句处理的每个阶段经过的时间来衡量性能。

如果只想测量Oracle中查询的经过时间,则可以使用SQL * Plus命令SET TIMING ON。

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