数据库实践_数据库使用实践

数据库实践

经过长时间的紧张思考,研究和头脑风暴,我终于下定决心,几乎没有使用数据库时可以考虑的最佳实践。
如今,所有数据库服务器都具有优化发送给服务器的查询的功能,具有讽刺意味的是,它们缺乏以使吞吐量最大化的方式更改查询的功能。 开发人员可以分析和优化查询以实现最大吞吐量。 在本节中,我们将研究一些有用的技巧,以优化查询以产生最佳输出。
  • 优先使用准备好的语句而不是创建语句。 准备语句在查询执行期间仅进行一次语法检查,而create语句在每次执行查询时都会对查询进行编译。 考虑到当今的服务器和应用程序要求,这可能不是关键因素,因为只有几毫秒甚至更少的时间。 使用准备好的语句的另一个更重要的好处是绑定变量的使用。 驱动程序本身会注意用于SQL注入和破坏数据库的引号和其他字符,从而提高了数据和数据库服务器的安全性。
  • 使用诸如EXPLAIN,ANALYZE之类的工具。 这些是DBA和开发人员优化查询的最重要工具(在posgresql中)。 这些命令将实时分析其查询的执行方式。 EXPLAIN命令显示了查询执行计划,我们可以确定计划中的瓶颈并采取适当措施消除这些瓶颈。
  • 利用索引。 数据库尽可能使用索引功能。 一些数据库甚至重新排列了“ where子句”,以便它可以更快地返回输出。 最好总是先在索引上加上where子句,然后再加上其他子句。
  • 维护只读查询的缓存并存储主表。 主表是很少修改的表。 这些表上的每个查询都将导致I / O,这是任何计算机中最慢的过程。 最佳实践是在应用程序中缓存主记录,以便将其存储在RAM中,以便可以更快地获取记录。 如果主表本身很大,则值得关注,因为它可能会耗尽您的RAM,并可能导致创建更糟的交换文件。 在这种情况下,最好从主应用程序中提取主记录,并部署单独的缓存服务以检索那些记录。
  • 在事务表上经常使用VACUUM。 频繁更新/删除表中的记录可能会导致大量的元组失效。 删除记录后,实际上不会释放为该记录分配的内存,而是将其标记为无效。 该死空间可用于存储可能适合该空间的另一条记录。 死元组太多可能会导致查询执行时间和表索引增加。 VACUUM命令对这些死元组进行分段。 另一个命令FULL_VACUUM将回收分配给死元组的内存。
  • 首选BETWEEN而不是<=和> =。 几乎所有主要的数据库驱动程序都会使用<=和> =优化查询。 但是通过使用BETWEEN子句,我们显式地为驱动程序提供了优化的查询。 即使这不会导致响应时间有很大差异,但在复杂的查询中考虑这一点可能还是一个好方法。
  • 获取唯一行或仅需要一条记录进行处理时,请使用LIMIT 1。
  • 查询大型数据库时,请使用LIMIT,OFFSET子句。 由于现在数据库服务器不必扫描整个表,因此这将减少查询时间。
  • 在执行SELECT / INSERT查询时,请始终指定所需的字段名称。 这将防止表的模式更改时应用程序中断。
  • 在where子句中放置的谓词将首先消除最大数量的行。
参考: Janeve.Me博客中JCG合作伙伴 George Janeve的数据库使用实践

翻译自: https://www.javacodegeeks.com/2012/07/database-usage-practices.html

数据库实践

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值