大家好,我是IT修真院武漢分院第11期學(xué)員凛虽,一枚正直善良的java程序員死遭。今天給大家分享一下任務(wù)一的深度思考:如果對學(xué)員QQ號做了一個唯一索引,在插入數(shù)據(jù)的時候凯旋,是否需要先判斷這個QQ號已經(jīng)存在了呀潭?
1.背景介紹
什么是唯一索引钉迷?
要說唯一索引,的先說索引钠署。
? ? ? ? ? ? ? 打個比方糠聪,字典就是一張表,列面的每個字和解釋就是其中的列谐鼎,而索引就是在目錄中對應(yīng)音節(jié)和偏旁的頁數(shù)舰蟆,
? 如果沒有索引,就好比字典里沒有目錄狸棍,如果漢字只有幾十個身害,字典只有幾頁,當我們想找哪個字草戈,翻幾頁很快可以找出來塌鸯。可實際上字典里的數(shù)字遠遠不止這一些唐片,
? 一本字典去找這個字效率太低丙猬,因而我們需要索引,直接根據(jù)索引找到這個字费韭。
? 唯一索引淮悼,顧名思義,添加了唯一索引的列的數(shù)據(jù)不能重復(fù)
2.知識剖析
在實際情況中揽思,像qq號袜腥,身份證號,手機號這樣的數(shù)據(jù)钉汗,肯定是不能重復(fù)的羹令,對于這樣的字段,我們就應(yīng)該添加唯一索引
3.常見問題
如果對學(xué)員QQ號做了一個唯一索引损痰,在插入數(shù)據(jù)的時候福侈,是否需要先判斷這個QQ號已經(jīng)存在了?
4.解決方案
判斷也可以卢未,不過不方便肪凛,多連接一次數(shù)據(jù)庫,影響性能辽社。我們可以在插入語句后加ON DUPLICATE KEY UPDATE 添加了唯一索引的字段名 = VALUES(添加了唯一索引的字段名) 然后判斷他的返回值
5.編碼實戰(zhàn)
6.擴展思考
索引方式btree伟墙,hash有什么區(qū)別
btree
hash
簡單地說,哈希索引就是采用一定的哈希算法滴铅,把鍵值換算成新的哈希值戳葵,檢索時不需要類似B+樹那樣從根節(jié)點到葉子節(jié)點逐級查找,只需一次哈希算法即可立刻定位到相應(yīng)的位置汉匙,速度非彻八福快生蚁。
從上面的圖來看,B+樹索引和哈希索引的明顯區(qū)別是:
如果是等值查詢戏自,那么哈希索引明顯有絕對優(yōu)勢邦投,因為只需要經(jīng)過一次算法即可找到相應(yīng)的鍵值;當然了擅笔,這個前提是尼摹,鍵值都是唯一的。如果鍵值不是唯一的剂娄,就需要先找到該鍵所在位置蠢涝,然后再根據(jù)鏈表往后掃描,直到找到相應(yīng)的數(shù)據(jù)阅懦;
從示意圖中也能看到和二,如果是范圍查詢檢索,這時候哈希索引就毫無用武之地了耳胎,因為原先是有序的鍵值惯吕,經(jīng)過哈希算法后,有可能變成不連續(xù)的了怕午,就沒辦法再利用索引完成范圍查詢檢索废登;
同理,哈希索引也沒辦法利用索引完成排序郁惜,以及l(fā)ike ‘xxx%’ 這樣的部分模糊查詢(這種部分模糊查詢堡距,其實本質(zhì)上也是范圍查詢);
哈希索引也不支持多列聯(lián)合索引的最左匹配規(guī)則兆蕉;
B+樹索引的關(guān)鍵字檢索效率比較平均羽戒,不像B樹那樣波動幅度大,在有大量重復(fù)鍵值情況下虎韵,哈希索引的效率也是極低的易稠,因為存在所謂的哈希碰撞問題。
轉(zhuǎn)自:http://www.cnblogs.com/zengkefu/p/5647279.html
7.參考文獻
https://www.cnblogs.com/heiming/p/5865101.html
8.更多討論
技能樹.IT修真院
“我們相信人人都可以成為一個工程師包蓝,現(xiàn)在開始驶社,找個師兄,帶你入門测萎,掌控自己學(xué)習(xí)的節(jié)奏亡电,學(xué)習(xí)的路上不再迷茫”绳泉。
這里是技能樹.IT修真院逊抡,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化零酪,成長可見化冒嫡,師兄1對1免費指導(dǎo)∷奈快來與我一起學(xué)習(xí)吧