mysql的索引和優化

2021-10-12 02:20:53 字數 1809 閱讀 4031

索引是資料庫管理系統中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料。

如果你的字典沒有目錄,你給我查乙個字,我看看。

mysql 的索引分為 單例索引(主鍵索引、唯一索引、普通索引)和 組合索引。

primary key:在建立表選擇主鍵的時候,預設生成主鍵索引,是一種特殊的唯一索引(不允許有空值)。

unique:設定唯一索引的字段不能有重複的資料。

normal:

乙個索引列中包含乙個以上的字段

innodb和myisam預設的索引是btree索引;

mermory預設的索引是hash索引。

因為索引檔案myi和資料檔案myd是分開的,myi裡面儲存的是myd檔案的指標,而且主鍵索引和非主鍵索引沒有層次關係,因為儲存的都是指向myd檔案的指標

只有乙個idb檔案,在主鍵索引和非主鍵索引有層次的關係,因為主鍵索引儲存的是真是的資訊,而非主鍵索引儲存的是主鍵的資訊

我們在mysql中常用兩種索引演算法btree和hash,兩種演算法檢索方式不一樣,對查詢的作用也不一樣。

btree索引是最常用的mysql資料庫索引演算法,因為它不僅可以被用在=,>,>=,<,<=和between這些比較操作符上,而且還可以用於like操作符,只要它的查詢條件是乙個不以萬用字元開頭的常量。

btree是按照從左到右的順序來建立搜尋樹的。比如索引是(name,age,***),會先檢查name欄位,如果name欄位相同再去檢查後兩個字段。

所以當傳進來的是後兩個欄位的資料(age,***),因為建立搜尋樹的時候是按照第乙個字段建立的,所以必須根據name欄位才能知道下乙個欄位去**查詢。

傳進來的是(name,***)時,首先會根據name指定搜尋方向,但是第二個字段缺失,所以將name欄位正確的都找到後,然後才會去匹配***的資料。

select * from user where ***=0 ; false

select * from user where ***=0 and name=』』; true

所謂hash索引,當我們要給某張表某列增加索引時,將這張表的這一列進行雜湊演算法計算,得到雜湊值,排序在雜湊陣列上。所以hash索引可以一次定位,其效率很高,只能用於對等比較,例如=,<=>(相當於=)操作符

1、利用最左字首:mysql會一直向右查詢直到遇到範圍操作(>,<,like、between)就停止匹配。比如a=1 and b=2 and c>3 and d=6;此時如果建立了(a,b,c,d)索引,那麼後面的d索引是完全沒有用到,當換成了(a,b,d,c)就可以用到。

3、盡量擴充套件索引而不要新建索引

4、最適合的索引的列是出現在where子句中的列或連線子句中指定的列。

5、不同值較少的列不必要建立索引(性別)。

乙個表不要建立過多的索引,索引是方便了查詢,同樣它也是有維護的代價,和占用的空間。 新增和刪除都有維護索引的消耗。

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...

mysql索引優化原則 MySQL索引優化

mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...