更新時間:2020-04-17 13:57:53 來源:動力節點 瀏覽2679次
眾所周知,在MySQL數據庫中,索引是存儲引擎層實現的,它也是可以迅速找出記錄的一種數據結構,以犧牲空間的方式來換取時間。那么MySQL數據庫如何建立索引?有哪些技巧呢?本文將從創建索引的原因、原則和技巧三方面進行分析,為大家解決上述疑問。
一、為什么要創建索引呢?
1、通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
2、可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
3、可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
4、在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
5、通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
二、MySQL數據庫創建索引的原則
1、對于查詢頻率高的字段創建索引;
2、對排序、分組、聯合查詢頻率高的字段創建索引;
3、索引的數目不宜太多;
4、若在實際中,需要將多個列設置索引時,可以采用多列索引;
5、選擇唯一性索引;
6、盡量使用數據量少的索引;
7、盡量使用前綴來索引;
8、刪除不再使用或者很少使用的索引。
三、MySQL數據庫建立索引的技巧
1、對查詢進行優化,應盡量避免全表掃描,首先應考慮在where及orderby涉及的列上建立索引。
2、應盡量避免在where子句中對字段進行null值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:selectidfromtwherenumisnull可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:selectidfromtwherenum=0
3、應盡量避免在where子句中使用!=或<>操作符,否則引擎將放棄使用索引而進行全表掃描。
4、應盡量避免在where子句中使用or來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:selectidfromtwherenum=10ornum=20可以這樣查詢:selectidfromtwherenum=10unionallselectidfromtwherenum=20
5、in和notin也要慎用,否則會導致全表掃描,如:selectidfromtwherenumin(1,2,3)對于連續的數值,能用between就不要用in了:selectidfromtwherenumbetween1and3
6、避免使用通配符。下面的查詢也將導致全表掃描:selectidfromtwherenamelike‘李%’若要提高效率,可以考慮全文檢索。
7、如果在where子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:selectidfromtwherenum=@num可以改為強制查詢使用索引:selectidfromtwith(index(索引名))wherenum=@num
8、在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,并且應盡可能的讓字段順序與索引順序相一致。
9、盡可能的使用varchar/nvarchar代替char/nchar,因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個相對較小的字段內搜索效率顯然要高些。
10、在所有的存儲過程和觸發器的開始處設置SETNOCOUNTON,在結束時設置SETNOCOUNTOFF。無需在執行存儲過程和觸發器的每個語句后向客戶端發送DONE_IN_PROC消息。
以上就是動力節點java培訓機構的小編針對“Java數據庫視頻教程下載, MySQL如何建立索引”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
Java數據庫免費視頻教程
老杜最新MySQL教程:http://www.dabaquan.cn/javavideo/111.html
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習