資料庫 mysql 索引學習記錄

2021-06-08 14:54:52 字數 1381 閱讀 5477

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等)

、無線業務運營、無線開放平台、統計分析

(使用者行為分析

/資料探勘)、

[email protected]

mysql資料庫索引學習

最近做的乙個專案用的是mysql資料,編寫sql 的時候,因為業務複雜,經常有很多表聯合查詢的sql需要編寫,於是我就思考著,如果資料量將來打起來後,這麼複雜的sql執行起來會不會慢,後人接手我的專案後,會不會因為效能原因罵我?帶著問題,開始學習mysql索引相關的內容起來。學了一段,寫篇文章記錄一...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫(MySQL)學習記錄

業務需要,從零學習資料庫。持續更新中 資料庫 資料庫是一些關聯表的集合。資料表 表是資料的矩陣。在乙個資料庫中的表看起來像乙個簡單的電子 冗餘 儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。主鍵 主鍵是唯一的。乙個資料表中只能包含乙個主鍵。你可以使用主鍵來查詢資料。外來鍵 外來鍵用於關聯兩個表...