所謂索引就是為特定的mysql字段進行一些特定的算法排序,比如二叉樹的算法和哈希算法,哈希算法是通過建立特征值,然后根據特征值來快速查找。而用的最多,并且是mysql默認的就是二叉樹算法 BTREE,通過BTREE算法建立索引的字段,比如掃描20行就能得到未使用BTREE前掃描了2^20行的結果,具體的實現方式后續本博客會出一個算法專題里面會有具體的分析討論;
Explain優化查詢檢測
EXPLAIN可以幫助開發人員分析SQL問題,explain顯示了mysql如何使用索引來處理select語句以及連接表,可以幫助選擇更好的索引和寫出更優化的查詢語句.
使用方法,在select語句前加上Explain就可以了:
| Explain select * from blog where false; |
mysql在執行一條查詢之前,會對發出的每條SQL進行分析,決定是否使用索引或全表掃描如果發送一條select * from blog where falseMysql是不會執行查詢操作的,因為經過SQL分析器的分析后MySQL已經清楚不會有任何語句符合操作;
Example
| mysql> EXPLAIN SELECT `birday` FROM `user` WHERE `birthday` < "1990/2/2"; |
-- 結果:
| id: 1 |
select_type: SIMPLE -- 查詢類型(簡單查詢,聯合查詢,子查詢)
select_type
simple 簡單select(不使用union或子查詢) primary 最外面的select union union中的第二個或后面的select語句 dependent union union中的第二個或后面的select語句,取決于外面的查詢 union result union的結果。 subquery 子查詢中的第一個select dependent subquery 子查詢中的第一個select,取決于外面的查詢 derived 導出表的select(from子句的子查詢)新聞熱點
疑難解答