索引:索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存叹谁。如果沒有索引饲梭,執(zhí)行查詢時MySQL必須從第一個記錄開始掃描整個表的所有記錄,直至找到符合要求的記錄焰檩。表里面的記錄數(shù)量越多憔涉,這個操作的代價就越高。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引析苫,MySQL無需掃描任何記錄即可迅速得到目標記錄所在的位置兜叨。如果表有1000個記錄穿扳,通過索引查找記錄至少要比順序掃描記錄快100倍。
索引 index 国旷,就像目錄一樣矛物,比如一本書或者字典,如果你想快速找到某個字跪但,你最快的方法是看目錄然后翻到相應的頁面履羞,但是如果這本書很薄,只有一兩頁屡久,這時候看不看目錄沒啥區(qū)別忆首,反過來,如果mysql數(shù)據(jù)庫量很小的時候被环,有沒有索引也沒什么區(qū)別糙及。當然,如果非要問多少量蛤售,一般我的經(jīng)驗是一萬丁鹉,一張表如果超過萬條記錄妒潭,那么建立索引比不建立索引會有一個可觀的效率提升(否則一般就是0.0000xx 秒和0.00xx秒的區(qū)別悴能,一般沒有提升效率的感覺,如果數(shù)據(jù)量過十萬百萬的話雳灾,可能是幾秒幾十秒和不到0.1秒的差距漠酿,差距非常大),可以自己弄測試數(shù)據(jù)測試谎亩。當然炒嘲,哪怕數(shù)據(jù)量很小,建立索引也是ok的匈庭,這個養(yǎng)成習慣最好夫凸。
?大概知道了什么是索引,那么索引還有分類即單列索引和組合索引阱持。單列索引顧名思義就是一個字段的索引夭拌,比如建立表都會有個主鍵id,一般這個就具備索引的衷咽,可以把他當成索引鸽扁。
這邊側重說下唯一性索引 ,這種索引和前面的“普通索引”基本相同镶骗,但有一個區(qū)別:索引列的所有值都只能出現(xiàn)一次桶现,即必須唯一。這個很多地方都會用到鼎姊,比如你建立一個人員信息表骡和,表是自增的相赁,但是你希望插入的人不重復(判斷依據(jù)是身份證+手機號碼)。那么如果你不建立唯一性索引慰于,一般你就是插入前先判斷一下數(shù)據(jù)庫是否有idcard+mobile的數(shù)據(jù)噪生,有就更新,沒有就插入东囚,比較繁瑣跺嗽。而如果是建立idcard+mobile的索引的話,你就可以直接 insertBatch(List) 了页藻,不需要考慮是否有桨嫁。
增加唯一索引 alter table user add unique index(idcard,mobile);
刪除的話就是將add 換成 drop ,然后加上索引名稱即可份帐。