1. 程式人生 > 其它 >基於myisam儲存引擎做報表、索引

基於myisam儲存引擎做報表、索引

(1)很多年前的報表系統:

 

 

 

 

(2)B-樹 

左邊小,右邊大,介於中間進入下一層

 

 (3)B+樹

非葉子節點,不儲存data,只儲存索引key

 

 (4)b+樹優化

葉子檢點之間加順序指標,方便範圍查詢

 

 (5)myisam儲存引擎的索引

資料檔案和索引檔案是分開的

 

 (6)innodb儲存引擎的索引

必須有主鍵,資料檔案本身就是個索引檔案,這個索引預設根據主鍵建立的,叫做聚簇索引

 

索引檔案既是索引檔案,又是資料檔案,查詢到索引位置,再取資料

 

對非主鍵欄位建立的索引

name=索引 --> 葉子節點 --> 主鍵 --> 根據主鍵去找資料

 

 

 備註:

1. 不要用長字串欄位做索引,會佔用很大空間

2. 主鍵索引儘量設定 auto-increase

 

(7)索引的使用規則

select * from table where a=1 and b=2 and c=3,怎麼建索引?

1. 會根據平時常用幾個欄位,建立一個聯合索引

<1> 全列匹配

<2> 最左字首匹配原則

<3> 字首匹配  %

<4> 範圍列匹配

<5> 包含函式

 

(8)索引的缺點和注意項

缺點:佔用磁碟檔案,高併發下頻繁插入和修改索引會導致效能損耗

 

建議:儘量建立少的索引,一個表一兩個索引

1. status就2個值0和1,建立索引,幾乎跟全表掃描差不多

2. select count(distinct col)/count(*) 的佔比

3. 長字串欄位,可以用前幾個字元建立索引

 

(9)程式碼處理

儘量SQL語句單表查詢,避開join,需要join時儘量在Java程式碼裡處理

用mysql當線上即時儲存,存資料,簡單取資料,不要在mysql中進行計算