优化 SQL

Optimization SQL

我对 SQL 编写和尝试学习如何优化我的查询还很陌生。我在网上看到的建议是:explain plan and indexing。(我用的是Teradata)

我有一些问题:

  1. Teradata 在解析引擎后有 "Optimizer",这是否意味着优化器选择最有效的计划?

  2. 我知道explain plan给了我们AMP流程的详细步骤,给了信心和预估时间,我们怎么用呢?作为参考指南?

  3. 我们可以运行解释一下视图的计划吗?

抱歉,如果我的问题对您来说很愚蠢,我正在努力学习并希望有人能提供帮助。 (: 在此先感谢您。

尝试回答。这里有一些错误的假设,但我已经在适当的地方指出了这些假设:

  1. 这里说"Sql Server"是微软的产品。没什么大不了的,但这会导致混淆,尤其是在我们回答多个 RDBMS 的 SO 上。至于索引和优化器:索引是您对 table(或 AJI 中的多个 table)执行的操作。这不是你在提交 SELECT 声明时所做的事情,所以这个问题有点来自错误的假设。

    通常我们 1) 做一个 table, 2) 根据假定的使用确定并实现适当的索引, 3) 通过提交 SQL。优化器将查看您的 SQL 并根据索引、连接、偏差、统计信息和其他内容尝试确定将数据整合在一起的最佳方式。

    所以,简而言之,优化器不会索引任何东西。索引是你在提交 SQL 之前在 table 上做的事情。

  2. 解释计划准确地告诉您数据将如何从数据库中检索、数据将如何连接、中间结果集是否将跨 amp 重新分配,以及其他重要信息。您对 Teradata 的工作原理了解得越少,Explain 计划的帮助就越小,但它是开始学习的好地方!

    通常你写一个查询然后检查说明。根据您的发现,您可能想要更改 SQL 或采取更激烈的步骤,例如创建新索引。我强烈建议您查看 "Explain the Explain" 这本书和 Allison Torres 的 class。她知识渊博,将 Teradata 的解释分解成非常容易理解的部分。

  3. 您可以运行 解释一个视图。只需在视图前添加关键字 EXPLAIN。当然,它会使用底层的 table 来进行解释,因为视图只是使用 SQL 对结果集的定义。

    如果有索引,优化器可能会也可能不会使用它,这取决于它是否确定该索引提供了到您请求的数据的最快路径。同样,索引为 table(或 AJI 中的一组 table)定义一次,并由优化器决定的可能从中受益的任何查询使用。