mysql 索引,唯一索引

索引:索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存。如果沒有索引,執(zhí)行查詢時(shí)MySQL必須從第一個(gè)記錄開始掃描整個(gè)表的所有記錄,直至找到符合要求的記錄。表里面的記錄數(shù)量越多,這個(gè)操作的代價(jià)就越高。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引,MySQL無需掃描任何記錄即可迅速得到目標(biāo)記錄所在的位置。如果表有1000個(gè)記錄,通過索引查找記錄至少要比順序掃描記錄快100倍。

索引 index ,就像目錄一樣,比如一本書或者字典,如果你想快速找到某個(gè)字,你最快的方法是看目錄然后翻到相應(yīng)的頁面,但是如果這本書很薄,只有一兩頁,這時(shí)候看不看目錄沒啥區(qū)別,反過來,如果mysql數(shù)據(jù)庫量很小的時(shí)候,有沒有索引也沒什么區(qū)別。當(dāng)然,如果非要問多少量,一般我的經(jīng)驗(yàn)是一萬,一張表如果超過萬條記錄,那么建立索引比不建立索引會有一個(gè)可觀的效率提升(否則一般就是0.0000xx 秒和0.00xx秒的區(qū)別,一般沒有提升效率的感覺,如果數(shù)據(jù)量過十萬百萬的話,可能是幾秒幾十秒和不到0.1秒的差距,差距非常大),可以自己弄測試數(shù)據(jù)測試。當(dāng)然,哪怕數(shù)據(jù)量很小,建立索引也是ok的,這個(gè)養(yǎng)成習(xí)慣最好。

?大概知道了什么是索引,那么索引還有分類即單列索引和組合索引。單列索引顧名思義就是一個(gè)字段的索引,比如建立表都會有個(gè)主鍵id,一般這個(gè)就具備索引的,可以把他當(dāng)成索引。

這邊側(cè)重說下唯一性索引 ,這種索引和前面的“普通索引”基本相同,但有一個(gè)區(qū)別:索引列的所有值都只能出現(xiàn)一次,即必須唯一。這個(gè)很多地方都會用到,比如你建立一個(gè)人員信息表,表是自增的,但是你希望插入的人不重復(fù)(判斷依據(jù)是身份證+手機(jī)號碼)。那么如果你不建立唯一性索引,一般你就是插入前先判斷一下數(shù)據(jù)庫是否有idcard+mobile的數(shù)據(jù),有就更新,沒有就插入,比較繁瑣。而如果是建立idcard+mobile的索引的話,你就可以直接 insertBatch(List) 了,不需要考慮是否有。

增加唯一索引 alter table user add unique index(idcard,mobile);

刪除的話就是將add 換成 drop ,然后加上索引名稱即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容