MySQL 索引

今夜有点儿凉發表於2024-12-05

mysql 索引

mysql 中的索引一般分為 B樹索引,和雜湊索引。就是 通過二叉樹演算法或者雜湊演算法來提高速度。

首先來看一下B樹索引

如果我們有9個 資料分別是  1,2,3,4,5,6,7,8,9  如果我們要在其中找到7 按照普通的查詢一個一個查詢需要查詢7次才能找到。如果使用B數索引就可以

快速找到。

二叉樹演算法的過程是 將 中間值找出來然後 必中間值大的放在右邊,比中間值小的放在左邊。然後再細分,我畫了一個圖可能不太好看。

 

通過上面的圖可以看出,找到7 需要2次查詢 第一個找到5判斷 7比5大,然後去5的右邊查詢,第二次就查詢到7了,這個過程就是B樹索引。

還有一種是雜湊索引。雜湊演算法呢,是通過雜湊運算將每個值計算出類似序列號的一個東東,  比如說  第一個為   0001  第二個為  0002 第三個為  0009  第四個為 0017,然後 會開闢一個空間  有 0001  到  0017  個內容   將值通過序列號  將值放入空間中,當我們要查詢內容時,將查詢的內容 通過雜湊運算得到序列號,通過序列號理論上就可以一次找到內容。但是雜湊排序是有缺點的,1.如果算去來的序列號不是連續的 中間就會有 空出的位置浪費空間,如果算出來的序列號有重複的就要二次處理。

普通索引 (index)  加快查詢速度

唯一索引  (unique) 列內容不能重複

主鍵索引 (primary key)主鍵不能重複    主鍵不能重複 一個表只能有一個主鍵, 但是可以有多個唯一約束

全文索引    (fultext)

 

建立索引:

alter table 表明 add    index/unique/fulltext [索引名](列名);  索引名可以不寫預設為列明

主鍵索引:

alter table 表明 add primary key 列名。  主鍵索引 索引名為列明(必須)

 

檢視錶上的索引

show  index from 表明;

 

刪除索引

alter table 表明 drop index 索引名。

刪除主鍵:

alter table 表名 drop primary key

 

 

全文索引

全文索引再 myisam 中可用 在 innodb 中不可用。

 

全文索引是對內容起作用的一種索引。

 

全文索引會對文章內容的每一個單詞建立一個索引,在建立索引時會有一些停止詞(如 this  is  這些比較常見的單詞不會建立索引)。

 

全文索引是依靠匹配度計算的。  檢視匹配度

 

Select id,email,tel,match(con) against (‘tiger’) from member;

 

查詢

 

Select * from member where  match(con)  ageinst(’china’);

 

Select * from 表名  match(全文索引) against(’匹配詞’);

 

mysql 的全文索引對中文意義不大。

 

因為英文有空格,有標點符號來拆成單詞,然後進行單詞的索引,但是對於中文來說沒有空格來隔開單詞,mysql 沒法識別每個中文詞語

 

使用索引的不好的地方:

1.一個表的索引太多,會浪費硬碟空間。

2.索引會是插入,修改,刪除表內容是速度變慢,因為每操作一次,索引也會更新一次。

3.在移動資料庫時,批量匯入資料時應該將索引刪除,在匯入,匯入成功後在條件索引,不然匯入速度太慢。

4.不怎麼當搜尋條件的欄位就不要建立索引了,因為沒用。

5.內容大都是重複的欄位也不要索引了,比如性別的欄位,建立索引幹嘛呢?(但是有例外 !!)

相關文章