MySQL數據庫中怎樣建立索引,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
一、為什么要創建索引呢?
1、通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
2、可以大大加快 數據的檢索速度,這也是創建索引的最主要的原因。
3、可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
4、在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
5、通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
二、MySQL數據庫創建索引的原則
1、 對于查詢頻率高的字段創建索引;
2、對排序、分組、聯合查詢頻率高的字段創建索引;
3、索引的數目不宜太多;
4、若在實際中,需要將多個列設置索引時,可以采用多列索引;
5、選擇唯一性索引;
6、盡量使用數據量少的索引;
7、盡量使用前綴來索引;
8、刪除不再使用或者很少使用的索引。
三、MySQL數據庫建立索引的技巧
1、對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2、應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num is null可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:select id from t where num=0
3、應盡量避免在 where 子句中使用!=或<>操作符,否則引擎將放棄使用索引而進行全表掃描。
4、應盡量避免在 where 子句中使用or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num=10 or num=20可以這樣查詢:select id from t where num=10 union all select id from t where num=20
5、in 和 not in 也要慎用,否則會導致全表掃描,如:select id from t where num in(1,2,3) 對于連續的數值,能用 between 就不要用 in 了:select id from t where num between 1 and 3
6、避免使用通配符。下面的查詢也將導致全表掃描:select id from t where name like ‘李%’若要提高效率,可以考慮全文檢索。
7、如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:select id from t where num=@num可以改為強制查詢使用索引:select id from t with(index(索引名)) where num=@num
8、在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,并且應盡可能的讓字段順序與索引順序相一致。
9、盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個相對較小的字段內搜索效率顯然要高些。
10、在所有的存儲過程和觸發器的開始處設置 SET NOCOUNT ON ,在結束時設置 SET NOCOUNT OFF。無需在執行存儲過程和觸發器的每個語句后向客戶端發送DONE_IN_PROC 消息。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。