mysql索引與md5 談Mysql索引

2021-10-18 11:52:42 字數 1095 閱讀 9052

myisam和innodb的索引有什麼區別?

兩個索引都是b+樹索引,但是myisam的表儲存和索引儲存是分開的,索引儲存中存放的是表的位址。而innodb表儲存本身就是乙個b+樹,它是用主鍵來做b+樹的key的。

因此innodb需要設定主鍵,如果沒有的話,mysql會優先使用unique鍵做主鍵,如果沒有unique的話,會生成乙個隱含字段做主鍵。

innodb中的主鍵最好是要使用自增id,因為這樣當進行插入操作的時候是不需要修改表的儲存結構的。

innodb的輔助索引key是輔助索引,而value則是主鍵。那麼這樣的話,innodb中主鍵如果是md5之類的字串的話,那麼每個輔助索引的磁碟空間就占用很大,而且也有前一條的問題,當插入操作的時候還需要修改表結構。

覆蓋索引

由於innodb的輔助索引帶主鍵的機制就導致一種「覆蓋索引」的使用。就是只需要在輔助索引中就可以進行到值查詢而不需要進行查表。比如乙個innodb表student欄位有uid(主鍵),username,age。其中建立乙個輔助索引username,那麼如果你希望查詢乙個學生名為yejianfeng的學生是否存在:

select id from student where username=」yejianfeng」  (這個查詢語句是使用到覆蓋索引的,它只會去索引中進行一次查詢,而不會查表,當然如果這個表是myisam表的話,就不會覆蓋索引了)

select * from student where username=」yejianfeng」  (這個查詢是使用不到覆蓋索引的,它會去索引查詢一次,然後根據主鍵id去表中再查詢一次。所以說不要濫用*)

索引選擇性

索引選擇性是建立索引的參考指標,指的是該字段可選擇的非重複項在總條數中佔的比例。比如說乙個表中有100000的條數,有個字段是性別字段,這個性別它只有兩個選擇,所以它的索引選擇性就是2/100000 ~ 0.00002,那麼這種情況下,我們就沒必要再給這個字段單獨加個索引。原因是當選擇性太小的話,比如我進行一次查詢查出來的100條中有50條是符合查詢結果的,相比於選擇性大的情況,我進行一次查詢查出來的100條中只有5條是符合查詢結果的,那麼後一種建立索引讓索引查詢出來的結果變小的效果明顯更大。而考慮到索引也占用資源以及增刪操作的成本,選擇性太小的字段就沒有建立索引的必要了。

MD5加密與解密

using system using system.collections.generic using system.linq using system.text using system.security.cryptography using system.io namespace encrypt...

MD5加鹽與安全

php開發者對md5 這個函式是熟悉不過了,很多開發者都使用md5 abc123 對使用者密碼進行加密處理,這樣做沒有錯,但是安全性還是很低的,因為很多 的使用者資料都是用md5進行加密處理的,所以就發生了撞庫事件,最典型的就是前些年12306火車票 上的使用者資訊洩露事件。很多人在多個 使用相同的...

MD5 概念與用途

md5概念 md5這是message digest algorithm 5 資訊 摘要演算法 縮寫。用於加密和解密技術上,它能夠說是檔案的 數字指紋 不論什麼乙個檔案,不管是可執行程式 影象檔案 暫時檔案或者其它不論什麼型別的檔案,也不管它體積多大。都有且僅僅有乙個獨一無二的md5資訊值,而且假設這...