mysql 索引學習記錄
----by james
1 mysql索引的型別
在mysql
中,主要有四種型別的索引,分別為:
b-tree
索引,hash
索引,fulltext
索引和rtree
其中hash索引在對待聯合索引的處理上有點特別
比如乙個name和email列的聯合索引,
在innodb,myisam中,是b-tree索引,
select * from tb where name="james" 將會使用該索引
而如果是在memdb,此時該查詢將找不到索引
2 索引的選擇
4.0版本的mysql乙個查詢只能使用乙個索引,所以選擇索引對效能的影響尤其明顯。
類似於聯合查詢中小結果集驅動大結果集,索引應該選擇雜湊度最高的。
比如查詢流水表某個賬戶的某條流水時,由於歷史原因,可用的索引只有乙個按賬戶號碼。
那麼查詢某賬戶所有流水使用
select * from water where fuin=10001; 顯然是足夠的
而如果查詢某個使用者某個訂單號的記錄資訊
select * from water where fuin=10001 and fserial_no=88888;
由於一張表中相同使用者的號碼的流水很多,所以按索引找到fuin=10001這個子集以後需要遍歷該子集所有才能找到合適的記錄,
此時最佳的方案是建立乙個訂單號索引,或者建立乙個聯合索引,當然,建索引會鎖表,這是現網中要考慮的乙個問題。
上面是索引不夠用的情況的,相反的,如果有多個索引,按照雜湊度選擇最靠譜的索引也是需要使用explain,profile分析出最佳索引。
3 索引的弊端
對於插入頻繁的表,索引過多會增加插入的時間,因為插入後要更新索引。
所以規避的方法就是讀寫表分離,把查詢所需的索引建在讀表上,可兼顧讀寫的效率。
4 優化
現網中應該增加對慢查詢的監控,可以即時發現db的執行狀態。
本文原創自無線技術運營空間:
及 (專注無線技術運營
——無線技術
(作業系統
/資料庫
/web前端/
負載均衡
/系統容災
/系統安全
/簡訊接入
/wap
接入/3g等)
、無線業務運營、無線開放平台、統計分析
(使用者行為分析
/資料探勘)、
cp1780551083@qq.com)
mysql資料庫索引學習
最近做的乙個專案用的是mysql資料,編寫sql 的時候,因為業務複雜,經常有很多表聯合查詢的sql需要編寫,於是我就思考著,如果資料量將來打起來後,這麼複雜的sql執行起來會不會慢,後人接手我的專案後,會不會因為效能原因罵我?帶著問題,開始學習mysql索引相關的內容起來。學了一段,寫篇文章記錄一...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
資料庫(MySQL)學習記錄
業務需要,從零學習資料庫。持續更新中 資料庫 資料庫是一些關聯表的集合。資料表 表是資料的矩陣。在乙個資料庫中的表看起來像乙個簡單的電子 冗餘 儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。主鍵 主鍵是唯一的。乙個資料表中只能包含乙個主鍵。你可以使用主鍵來查詢資料。外來鍵 外來鍵用於關聯兩個表...