Mysql執行速度優化
阿新 • • 發佈:2019-01-24
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後將停止掃描,而不是去掃描整個表或索引。