sql執行計畫分析
索引的執行計畫主要可以根據explain select * from ***x 來看
1 type
下面以 const>ref>range>index>all,其中級別能達到const、ref都很好,range看篩選出來情況,如果篩出10w條資料那就坑了(另外主鍵/唯一索引 用 is null,type=ref,二級索引是type=ref_or_null)
-- mysql版本:5.7.22
-- 等值查詢
explain select *
from user_demo_course
-- 第一種:普通索引:type=ref
-- where user_id=115
-- 第二種:主鍵/唯一索引:type=const
-- where id = 652
-- where commentid = 26515
-- 第三中:沒有索引:type=all
-- where pkid=321
-- 範圍查詢
explain select *
from user_demo_course
-- 第一種:普通索引:type=range
-- where user_id > 20212 and user_id < 21254
-- 第二種:主鍵/唯一索引:type=range
-- where id > 20212 and id < 21254
-- where commentid > 20212 and commentid < 21254
-- 第三中:沒有索引:type=all
-- where pkid > 20212 and pkid < 21254
-- 掃面索引樹(type=index表示)
explain select
swapid,pkid
from user_demo_course
-- 第一種:聯合索引中非第乙個,如(a, b)中b過濾,並且select裡面只有二級索引樹的字段,這時候就是掃面二級索引樹
-- -- type=index
where pkid > 3123412
-- 第二種:假設commentid是普通索引,select中是select commentid from ***,這時候也是掃瞄二級索引樹
-- type=inde
-- where commentid = 323
多表關聯sql怎麼執行
舉個例子如下:
select * from t1,t2 where t1.x1=xx and t1.x2=t2.x2 and t2.x3=***
- 先查出t1.x1=xx的資料,然後把這波資料與t2表關聯,即t1.x2=t2.x2 and t2.x3=***關聯得到資料
怎麼計算查詢成本?
假設有乙個二級索引 where user_id in (x,xx,xx), 查出100條資料,其中涉及到24(不好說,如果無序情況下甚至會達到100個)個資料頁。其成本如下:
成本 = 0.2 * 100條 + 1 * 24頁 + 0.2 * 100(二級索引需要回表) = 64
就是說主鍵索引(不用回表),有序查詢(user_id > ***x,資料頁涉及比較少,比嗎比in這些不確認要好,但是in用途較廣),這些查詢方式會好一點
mysql如何基於各種規則去優化
1 基於in語句子查詢優化:
會先執行子查詢裡資料,然後寫入乙個
臨時表(explain可見 extra: using temporary),結果集不大就基於memory儲存引擎,結果集較大就建立普通b+樹索引放在磁碟,反正就是有索引的。
- select * from t1 where x1 in (select x2 from t2 where x3=***)
explain中extra的意思
using temporary:使用臨時表
using index:僅在二級索引執行,不需要回表
using index condition:現在二級索引查,然後回表找出其他(需要回表)
SQL執行計畫
引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫sql語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行同樣的...
SQL 執行計畫
使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸 l 表的讀取順序 l 資料讀取操作的操作型別 l 哪些索引可以使用 l 哪些索引被實際使用 l 表之間的引用 l 每張表有多少行被優化器查詢 explian ...
Sql優化 執行計畫
一段sql 寫好以後,可以通過檢視sql的執行計畫,初步 該sql在執行時的效能好壞,尤其是在發現某個sql語句的效率較差時,我們可以通過檢視執行計畫,分析出該sql 的問題所在。1 開啟熟悉的檢視工具 pl sql developer。在pl sql developer中寫好一段sql 後,按f5...