SQL优化培训有哪些参考,教训和/或者最佳实践

时间:2020-03-05 18:42:20  来源:igfitidea点击:

我知道这属于编程的黑人艺术领域,但这突然是我在职业生涯中需要加强的领域。有两个主题涉及过该主题,但是我不确定该主题是否真的涉及到如何与系统合为一体。例如:当我开始理解编译器的工作原理时,我成为了一名出色的C ++程序员,当我理解了人们的工作原理时,我成为了一名更好的软件工程师。他们是不同的学习途径。

我要问的是,我们是否应该将一个自助课程​​组合在一起,以变得不仅擅长编写语法正确的SQL,规范化的数据库,而且还包括快速优化的数据库。我们将关注什么,与谁交谈,会读谁以及如何到达那里?

解决方案

回答

我花了很长时间寻找资源,以帮助我准确地了解查询优化器的工作方式以及如何真正理解查询计划。我终于找到了:

T-SQL查询,作者:Itzik Ben-Gan

对于Sql Server 2005,我没有发现其他任何接近的东西。

回答

Sajal Dam提炼的SQL Server查询性能调优

回答

从我自己的经验中得出的3个最佳技巧:

  • 索引要在其上连接表的所有列
  • 指定我们实际要检索的字段,而不是" SELECT * FROM ..."
  • 使用SQL聚合函数,而不要滚动自己的函数。常见错误:打开记录集并使用记录集的" Count"属性,而不是使用" SELECT COUNT(*)..."

我知道这不是完整的资源或者其他任何东西,但是它会让我们入门。

优质的网络资源:http://www.sqlteam.com/tag/sql-server-performance-tuning

回答

"大师指南"书籍是相当不错的中级SQL Server资源。特别是,本系列的第3部分对SQL Server 2000进行了相当详细的体系结构剖析,可能会为我们提供所需的洞察力。

回答

我只是在为自己的工作学习更多的SQL(我之前知道一些,但是正在从事需要大量数据库交互的工作)。我正在阅读:

Joe Celko撰写的《 SQL for Smarties》和Anthony Molinaro撰写的《 SQL Cookbook》。如果我们选择一个,我会选择SQL for Smarties,因为它具有更多的理论并提供了更广阔的视野,而菜谱则更"这是一个特定的问题,以及在每个主要问题中如何解决它数据库应用程序"

回答

了解BerkeleyDB。这将迫使我们学习有关数据库如何工作的低级细节(在一定程度上)。作为一个拥有多年SQL Server的人,学习BDB使我迈上了一个新台阶。有大量的知识可以跨多个平台进行翻译(即数据的本地性,各种文件格式的影响,磁盘群集的具体信息等)。

我会警告我们,这不是出于胆小。

另外,如果要尝试这样做,请确保在BDB上找到一本书。严格地从参考资料中学习并不是很好。

回答

我会看看O'Reilly的Stephane Faroult和Peter Robson的《 SQL的艺术》。这很好地了解了数据标准化和优化的原理。

回答

我们需要学习阅读查询计划。我们需要了解如何对内部循环的内部工作,合并联接和哈希联接等进行伪编码。

查询计划是一门妖术,但是阅读计划也不错。查看将要运行的所有内容的计划(确保我们具有数据和当前统计数据的代表性样本)。我们也许能够理解妖术的产生。快速查看查询计划可以使我们更多地了解数据库的工作方式以及何时执行的工作效率不高。

找出那些低效的观点,并加以审视。查看它选择的方法。索引可能会或者可能不会更改计划(如果无济于事,我们可以随时删除它。)了解B树,R树和位掩码索引之间的区别,不仅在建议时,而且在推荐时它们的结构和工作方式,因此我们会知道为什么要推荐它们。

我发现学习它的唯一真实方法就是做到这一点。

该规则唯一的例外是Oracle 9,并且较新的版本有时无故选择Merge Join Cartesian。再次是妖术。

回答

Sajal Dam提炼的SQL Server查询性能调优是一本好书。

根据我的经验,除了已经说过的内容外,还想到了其他几件事。
首先不惜一切代价避免游标,尤其是在插入,删除,更新或者触发器中!
用派生表替换子查询。
如果需要,可以进行非规范化,特别是如果我们需要联接到另外两个或者三个大表,只是为了在每个查询中获得所需的内容(例如客户端ID)时,就可以进行非规范化。
编写可查询的查询(如果我们不知道这是什么,请用Google进行查询。)
检查临时表,表变量或者派生表是否会更快。
避免使用功能。