mysql和php ...我想了解优化

时间:2010-06-18 09:50:03

标签: php mysql

在mysql wat中的优化是我必须涵盖的主题吗?那里有很多东西.......

2 个答案:

答案 0 :(得分:1)

首先 - 分析你的代码/ sql以找到缓慢的位置。

第二 - 只优化这些缓慢的地方,不要试图优化已经快速或永不运行的东西。

答案 1 :(得分: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 DELAYED

INSERT LOW_PRIORITY语句在语句执行之前不会返回,这可能是永久的。相反,您可以使用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使用快速临时表来存储生成的表而不是使用排序。由于这通常是优化程序的默认路由,因此通常不需要此提示。