1. 程式人生 > >Mysql執行速度優化

Mysql執行速度優化

Mysql建立表有多種方式,哪種最快?

(1)create table t select * from t_old where 1 = 0;  

(2)create table t like t_old;  

(3)create table t(

......

)

其中

(1)最快,但是它取消原來表的有些定義。自增欄位、表引擎都變了,如果想要保持一樣的引擎,就在table名稱後邊加上:engine innodb。

(2)結構一摸一樣。這個穩定性存疑,主要是它要查詢原來的表。自測的話,單個執行這個速度比(3)快,批量情況下(3)比(2)快,在壓力狀態下,就不清楚了。

(3)常用方式,建錶速度挺慢,建一個普通的表,大概需要400毫秒左右的時間。

優化你的MySQL查詢快取

在MySQL伺服器上進行查詢,可以啟用高速查詢快取。讓資料庫引擎在後臺悄悄的處理是提高效能的最有效方法之一。當同一個查詢被執行多次時,如果結果是從快取中提取,那是相當快的。但主要的問題是,它是那麼容易被隱藏起來以至於我們大多數程式設計師會忽略它。在有些處理任務中,我們實際上是可以阻止查詢快取工作的。
// query cache does NOT work
$r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");
 // query cache works!
 $today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
 // query cache does NOT work
$r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");
 // query cache works!
$today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");

用EXPLAIN使你的SELECT查詢更加清晰

EXPLAIN查詢的結果,可以告訴你那些索引正在被引用,表是如何被掃描和排序的等等。
實現一個SELECT查詢(最好是比較複雜的一個,帶joins方式的),在裡面新增上你的關鍵詞解釋,在這裡我們可以使用phpMyAdmin,他會告訴你表中的結果。舉例來說,假如當我在執行joins時,正忘記往一個索引中新增列,EXPLAIN能幫助我找到問題的所在。

利用LIMIT 1取得唯一行

有時,當你要查詢一張表是,你知道自己只需要看一行。你可能會去的一條十分獨特的記錄,或者只是剛好檢查了任何存在的記錄數,他們都滿足了你的WHERE子句。
在這種情況下,增加一個LIMIT 1會令你的查詢更加有效。這樣資料庫引擎發現只有1後將停止掃描,而不是去掃描整個表或索引。

索引不僅是主鍵或唯一鍵。如果你想搜尋表中的任何列,你應該一直指向索引。