今天學習了一下mysql的優化的內容,做下筆記先。mysql可以從多個方面進行優化,sql語句的優化,資料庫結構優化,索引優化,儲存引擎優化等。今天就說一下sql語句的優化,我們經常會用用到以下語法的sql:
select ... from ... where ....
我們知道,如果採用id查詢的話可以非常快地將一條記錄查詢出來,但是也有很多情況下我們只用到其他列去查詢,這時候mysql會進行全表掃瞄,全表掃瞄是非常耗時的。如何進行優化呢?對於簡單的query當然是加索引啦,那麼索引怎麼加?加在**?對於初學者來說這個是個問題。那麼哪些列需要加索引呢,答案是where 語句中用到的列例如:
select * from student where stu_name = 'zhangsan';
以上的語句中如果stu_name沒有加索引,那麼就需要給它加乙個索引,問題是怎麼知道它有沒有加索引?使用explain 關鍵字:
explain select * from student where stu_name = 'zhangsan';
explain 關鍵字可以列印出sql語句執行時的執行計畫,也就是mysql如何去解釋並且執行這個sql。以下是乙個例子:
以上就是乙個sql的執行計畫,關於每個值的意思可以到官網檢視官方文件我們現在主要看possible_keys,key
在沒有索引的情況下這兩個欄位為空,並且查詢所需時間為0.19
加上索引之後這兩個字段儲存的是索引的名稱,查詢時間為0.09因為資料量不是很大,所以差別不是特別明星,但是也可以看到加上索引之後為我們帶來的效能提公升。對於大表來說,應該盡量避免全表掃瞄,索引的目的就為了避免全表掃瞄。另外所以對於聯表查詢,或者使用到外來鍵時就更加重要了。
接下來說一下函式呼叫的,函式呼叫怎麼優化?其實主要是對函式作用的範圍的優化,也就是說你呼叫的函式是對整個表還是對乙個結果集,一般情況下我們會對結果集呼叫乙個函式,如果對全表呼叫那就太耗時了。
使用analyze table語法定期更新統計表,這樣優化器才能得到最新資訊去執行制定乙個執行計畫,語法如下:
analyze [no_write_to_binlog | local] table
tbl_name [, tbl_name] ..
學了這一點點算是優化mysql的乙個開始了吧,後續還有很多相關的優化,例如對於sql的優化還可以通過調整快取池的大小,調整表的儲存引擎型別,多個session訪問表時鎖的問題。 mysql語句的優化(調優)
1 單條查詢最後新增 limit 1,停止全表掃瞄 否則,若無索引,將會查的太多 2 where子句中不要使用 否則放棄索引全表掃瞄。3 盡量避免 null 值判斷,否則放棄索引全表掃瞄。優化前 select number from t1 where number is null 優化後 selec...
MySQL語句的優化
1 使用limit 當不需要取出全部資料時,在查詢後面加上limit限制。2 select 每次看到select 的時候都需要用懷疑的眼光審視,是不是真的需要返回全部的列。3 重複查詢相同的資料 4 列表in 的比較 相對於or,in 的處理速度更快。5 分解關聯查詢 對於一些複雜的關聯查詢可以拆分...
mysql優化的查詢語句 優化MySQL查詢語句
前言 查詢語句的優化是sql效率優化的乙個方式,可以通過優化sql語句來盡量使用已有的索引,避免全表掃瞄,從而提高查詢效率。最近在對專案中的一些sql進行優化,總結整理了一些方法。1 盡量避免在 where 子句中對字段進行 null 值判斷 應盡量避免在 where 子句中對字段進行 null 值...