性能指南/数据库和性能
此页面需要母语人士的音频片段。 如果你能够并且愿意贡献,请 留言. |
除了创建 SQL 命令之外,我们还需要更多知识来优化数据库应用程序的性能。更多关于我们的数据库环境和软件设计的信息也很有帮助,就像一个在你身边的好数据库管理员一样。
首先,我们尝试在不改变应用程序和数据库模式的情况下进行一些优化。否则,我们也希望数据库的设计包含一些性能建议。
正确的驱动程序可以帮助我们。我们需要使用最新的直接数据库驱动程序。我们可以快速获取 ODBC,这通常是原型设计的不错方法。ODBC 访问会从数据库语句和结果中进行一些转换。这不可能很快或很猛烈。注意 - 依赖于编程语言的选择,我们有一些不同的驱动程序(例如 JDBC 知道四种驱动程序类型)。
数据库通常通过网络使用。为了处理传入的语句,这些数据库需要高性能的网络链接。如果许多用户使用数据库,请检查负载均衡以使用数据库集群。
你也要知道网络的 MTU [最大传输单元] 是如何工作的。优化你的数据库语句和结果以避免网络中的碎片化。这是数据库和网络的性能。这可能是最后一步,如果其他任何方法都帮不了你。
选择合适的表空间大小,还要记住撤销和临时表空间。你需要为你的表空间选择合适的系统文件。因此,我们不建议你使用日志文件系统。
表空间的划分可以帮助你。如果知道数据库中数据的相对分配,一些数据库系统可以更快地返回结果。
改变查询值的方式对数据库来说很重要。通过合适的键,你的查询可以获得超过 100% 的性能提升。创建正确的索引也很重要。这些索引的空间不会太大。最好不要用时间来判断我们是否拥有正确的键和索引。让我们使用执行计划...
执行计划是检查性能努力的好方法。这些通常以可视化的形式显示的统计信息让你看到:你的索引和键是否适合你的 SQL 语句?
通常我们需要排序的数据,我们可以简单地将这些请求包含在我们的 SQL 中。但请注意 - 我们的 RAM 可能会很快被填满,然后临时表空间 / 硬盘驱动器就会开始使用。此时,表空间 的定义方式就变得很重要了。
很多时候我们不需要将所有结果返回给用户。想想互联网搜索引擎 - 没有人一次性发送所有大的结果。首先,用户会从特殊规则中选择的部分结果集获得结果。小型化原则与后台进程或线程结合在一起用于获取后续结果片段,可以为我们的用户带来主观的性能提升。想想 - 你访问过多少个互联网搜索网站。
我们“普通”用户希望我们的查询结果非常快。但有些应用程序,比如数据仓库或统计数据,并不需要直接的结果。当我们需要结果时,它只是一个很小的但重要的信息来进行检查。有时异步离线查询就足够了。我们可以通过巧妙地延迟启动这些查询来停止不必要的压力 - 有时是在晚上…
我们可以使用数据库中保存的 SQL 查询 - 过程来更快地运行。在使用查询过程之前,我们的数据库会知道需要的信息,并可以进行优化。
否则,我们也可以使用存储过程。在这里,应用程序会在通常使用之前将 SQL 语句提供给我们的数据库。数据库也可以同样地为我们进行优化。
连接管理使用许多资源。检查需要多少个数据库连接。
重用数据库连接是一种很好的方式,叫做连接池。我们可以节省很多资源 / 开销,因为我们总是创建新的连接。
了解我们使用的数据库 SQL 语句是如何利用的,这是一个好主意。但这依赖于具体的数据库,因此我们最好将语句放到外部资源中。
Oracle
[edit | edit source]Oracle 数据库从右到左解释 where 子句。如果我们要连接大型表,应首先执行大型约束。因此,在 Oracle 数据库中,应将较大的约束放在右侧 - 例如
select * from Kunde K, Bestellung B
where Datum ‘1.1.2000’ and ’31.1.2000 23:59’ and Name= ‘Anton’
and K.kdkey = B.kdkey
Interbase
[edit | edit source]Interbase 从左到右解释 where 子句。如果我们要连接大型表,应首先执行大型约束。因此,在 Oracle 数据库中,应将较大的约束放在左侧 - 例如
select * from Kunde K, join Bestellung B on K.kdkey=B.kdkey
where “Anton”
and Datum between “1.1.2000” and “31.1.2000 23:59”