SQL 查询 - 在哪里可以找到比 a=b AND b=c AND a=c 慢的 a=b AND b=c 等更多优化花絮?

Posted

技术标签:

【中文标题】SQL 查询 - 在哪里可以找到比 a=b AND b=c AND a=c 慢的 a=b AND b=c 等更多优化花絮?【英文标题】:SQL Queries - Where to find more optimization tidbits like a=b AND b=c slower than a=b AND b=c AND a=c? 【发布时间】:2010-06-28 18:54:24 【问题描述】:

我只是想知道在哪里可以找到有关这些优化的更多信息? Google 搜索倾向于强调准备好的查询等,而不是真正从 SQL 提供的抽象角度。

来源: http://www.joelonsoftware.com/articles/LeakyAbstractions.html

SQL 语言旨在抽象 取消程序步骤 需要查询数据库,而不是 允许您仅定义您的内容 想让数据库弄清楚 查询它的程序步骤。但 在某些情况下,某些 SQL 查询是 比其他人慢数千倍 逻辑上等价的查询。一个著名的 例如,一些 SQL 如果你 指定“其中 a=b 和 b=c 和 a=c” 比只指定“其中 a=b and b=c" 即使结果集是 相同。你不应该有 关心程序,只有 规格。但有时 抽象泄漏并导致可怕 表现,你必须突破 查询计划分析器并研究什么 它做错了,并弄清楚如何 让您的查询运行得更快。

特别看mysql

【问题讨论】:

【参考方案1】:

您可以尝试SQL Server Performance,尽管我认为它比其他 RDBMS 更适合 MS SQL Server。就个人而言,我将性能调优视为一个过程,而不是花絮。

一旦您完成流程,您可能会在进行过程中遇到单项优化,但流程本身会给您带来最大的收益。了解如何阅读查询计划(或 RDBMS 中的等价物),了解服务器的内部/幕后实现,它如何存储和使用索引,如何找到 IO、内存、锁定等方面的瓶颈。

【讨论】:

【参考方案2】:

书籍比网络搜索更能学习数据库的性能调优。这是一个复杂的主题,从数据库到数据库,甚至正如@OMGPonies 所说的,从一个版本到另一个版本,差异很大。

只有我在亚马逊找到的 My SQL Performance 书,不知道它有多好: http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/0596101716/ref=sr_1_1?ie=UTF8&s=books&qid=1277756707&sr=8-1

【讨论】:

【参考方案3】:

“这些”不是优化。 学习分析 - 所有优化的源泉。 这就是你所需要的。

您提到的一个不是“优化花絮”。这是一个完全不同主题的例子。 而且它不适合盲人使用。 但仅作为分析的结果(如果适用)。

你的整个方法都是错误的。没有“优化花絮”。只有分析。一旦您发现您的“where a=b and b=c”查询运行缓慢 - 您可以开始寻找解决方案,而不是更早。

因此,您可以使用 2 种乐器:

BENCHMARK your query goes here

EXPLAIN your query goes here

研究他们的输出,然后就您的服务器、您的设置、您的数据库提出特定的问题。这是唯一的方法。没有“罐头食谱”可以提供帮助。

如果只是好奇的阅读,可以关注博客,名字出奇的http://mysqlperformanceblog.com

【讨论】:

以上是关于SQL 查询 - 在哪里可以找到比 a=b AND b=c AND a=c 慢的 a=b AND b=c 等更多优化花絮?的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别