2010-06-18 67 views
-2

在mysql中的优化笏是我必须讲述的主题吗?有这么多的东西.......mysql和php ...我想了解优化

+5

问这样一个普遍的问题类似于询问“如何在不提供问题或任何代码的情况下让代码更快运行”。如果您有优化感兴趣的代码示例,请将其发布到此处,而您可能会了解更多信息。 – 2010-06-18 09:53:35

回答

1

首先 - 分析你的代码/ sql找到缓慢的地方。

第二 - 只优化这些缓慢的地方,不要尝试优化已经很快,或从未运行。

1

MySQL的一些优化提示:

SQL_NO_CACHE

的SQL_NO_CACHE提示关闭MySQL的内置查询缓存机制特定查询。您可以通过在高度动态的查询(例如关键字搜索或每晚只运行一次的报表)上使用此提示来帮助MySQL使查询缓存更有效。确保查询缓存已打开,否则不需要此命令。

SQL_CACHE

如果在安装MySQL查询缓存来显式模式(设置query_cache_type的= 2),那么你可以使用SQL_CACHE提示告诉MySQL哪些查询缓存。

HIGH_PRIORITY

的HIGH_PRIORITY提示可以在SELECT或INSERT语句中,让MySQL的知道,这是一个高优先级查询。这个提示基本上允许查询跳过。

LOW_PRIORITY

的LOW_PRIORITY暗示可以在INSERT和UPDATE语句中使用。如果使用LOW_PRIORITY关键字,则会延迟查询的执行,直到没有其他客户端正在从表中读取数据。这意味着您可能会等待很长时间,或者永远在读取量很大的服务器上。

延迟插入

的INSERT LOW_PRIORITY statment不会返回,直到该语句已被执行,这有可能是永远。相反,您可以使用INSERT DELAYED语句。它会立即返回,但它仍然会等到其他客户端在执行语句之前关闭表。

注意:INSERT DELAYED只适用于MyISAM,MEMORY和ARCHIVE表。 STRAIGHT_JOIN

该提示将告诉MySQL按照它们在FROM子句中指定的顺序连接表。

使用EXPLAIN确保MySQL尚未找出最佳连接顺序。如果你指定了一个错误的顺序,你可以让MySQL做更多的工作。 SQL_BUFFER_RESULT

此提示告诉MySQL将查询结果放入临时表中。当结果集被发送到客户端时,这将释放表锁。所以你只想在大的结果集上使用它。

SQL_BIG_RESULT

的SQL_BIG_RESULT提示可以用DISTINCT和GROUP BY的SELECT语句中使用。正如你可能猜到的那样,告诉MySQL结果集会很大。据MySQL文档,如果调用

MySQL directly uses disk-based temporary tables if needed, and prefers sorting to using a temporary table with a key on the GROUP BY elements. 

SQL_SMALL_RESULT

你可能会猜到这是相当多SQL_BIG_RESULT相反。启用时,MySQL使用快速临时表来存储结果表,而不是使用排序。由于这通常是优化器的默认路由,因此通常不需要此提示。

+0

mysql docs页面的url会比一个巨大的复制粘贴更好 – 2010-06-18 10:15:02

+1

我喜欢复制和粘贴,使事情更易消化 – Haroldo 2010-06-18 11:07:39