Mysql-索引的基礎和類型

一、 ?索引的基礎


索引類似于書籍的目錄,要想找到一本書的某個特定主題,需要先查找書的目錄,定位對應的頁碼。

存儲引擎使用類似的方式進行數據查詢,先去索引當中找到對應的值,然后根據匹配的索引找到對應的數據行



二、 索引對性能的影響


優點:

1.大大減少服務器需要掃描的數據量

2.幫助服務器避免排序和臨時表

3.將隨機 I/O 變順序 I/O

4.大大提高查詢速度

缺點:

5.降低寫的速度(在執行寫操作時,會額外操作一遍索引)

6.占用磁盤



三、索引的使用場景


1.對于非常小的表,大部分情況下全表掃描效率會更高

2.對于中大型表來說,索引非常有效

3.特大型的表(上千萬,上億條數據),建立和使用索引的代價將會隨之增長,可以使用分區技術來解決



四、索引的類型


1.普通索引:最基本的索引,沒有任何限制


2.唯一索引:與普通索引類似,但是具有唯一性約束


3.主鍵索引:特殊的唯一索引,不允許有空值


4.組合索引:將多個列組合在一起創建索引,可以覆蓋多個列


5.外鍵索引:只有InnoDB的表才可以使用外鍵索引,保證數據的一致性,完整性,和實現級聯操作


6.全文索引:Mysql自帶的全文索引只能用于MYISAM,并且只能對英文進行全文檢索



主鍵索引和唯一索引的區別:


1.主鍵索引一定是唯一索引,但唯一索引不一定是主鍵索引


2.一個表只能有一個主鍵索引,但可能有多個唯一索引


3.主鍵可以與外鍵構成參照完整性約束,防止數據不一致



五、Mysql索引的創建原則


1.表的主鍵、外鍵必須有索引


2.主鍵盡可能選擇較短的數據類型,可以有效減少磁盤的占用,提高查詢效率(比如int)


3.經常與其他表進行連接的表,在連接字段上應該建立索引


4.經常出現在Where子句中的字段,特別是大表的字段,應該建立索引


5.索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引


6.頻繁進行數據操作的表,不要建立太多的索引


7.避免創建過多索引,索引會額外占用磁盤空間,降低寫操作效率


8.對字符串進行索引,應該制定一個前綴長度,可以節省大量的索引空間


9.復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替


----復合索引建立原則:


1)復合索引的幾個字段是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引


2)如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引


3)如果復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段



六、一般選擇在這樣的列上創建索引


1.在經常需要搜索查詢的列上創建索引,可以加快搜索的速度


2.在作為主鍵的列上創建索引,強制該列的唯一性和組織表中數據的排列結構


3.在經常用在連接的列上創建索引,這些列主要是一些外鍵,可以加快連接的速度


4.在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的


5.在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間


6.在經常使用在Where子句中的列上面創建索引,加快條件的判斷速度


7.為經常出現在關鍵字order by、group by、distinct后面的字段,建立索引



七、Mysql索引的注意事項


1.?限制表上的索引數目。對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數據的更新操作


2.?刪除不再使用,或者很少被使用的索引。表中的數據被大量更新,或者數據的使用方式被改變后,原有的一些索引可能不再被需要。數據庫管理員應當定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響


3.對復合索引,按照字段在查詢條件中出現的頻度建立索引。在復合索引中,記錄首先按照第一個字段排序。對于在第一個字段上取值相同的記錄,系統再按照第二個字段的取值排序,以此類推。因此只有復合索引的第一個字段出現在查詢條件中,該索引才可能被使用。因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。


4.like查詢,%不能在前,否則索引會失效


一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引


5.索引不會包含有NULL值的列


只要列中包含有NULL值都將不會被包含在索引中,復合索引中只要有一列含有NULL值,那么這一列對于此復合索引就是無效的。所以我們在數據庫設計時不要讓字段的默認值為NULL。



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282700.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282700.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ligerUI的列頭合并代碼片段

//列頭合并 function onAfterShowData(data){//顯示數據前觸發此事件 console.log(123); var k 0; var tr $(.l-grid-body.l-grid-body1).find(table tr);//找到被凍結的列(frozen),利用find方法找到所有的行 $.each($(tr)…

我的未來計算機作文,我的未來作文(精選4篇)

我的未來作文(精選4篇)在平平淡淡的日常中,大家總免不了要接觸或使用作文吧,作文根據體裁的不同可以分為記敘文、說明文、應用文、議論文。怎么寫作文才能避免踩雷呢?以下是小編收集整理的我的未來作文,僅供參考,大家一…

RDS for MySQL Mysqldump常見問題及處理

2019獨角獸企業重金招聘Python工程師標準>>> 摘要: RDS for MySQL Mysqldump 常見問題和處理 GTID 特性相關 避免表級鎖等待 設置導出字符集 其他導出時需要注意的選項 舉例 RDS for MySQL 不支持的選項 RDS for MySQL 邏輯備份 1. GTID 特性相關 MySQ…

AI求解PDE

一、波動方程的PINN解法: Guo Y, Cao X, Liu B, et al. Solving partial differential equations using deep learning and physical constraints[J]. Applied Sciences, 2020, 10(17): 5917. 二、二維的Navier–Stokes方程組的PINN解法 矢量形式的不可壓縮Navier-Stokes方程…

使用CADisplayLink實現UILabel動畫特效

在開發時,我們有時候會遇到需要定時對UIView進行重繪的需求,進而讓view產生不同的動畫效果。 本文項目 效果圖 初探 CADisplayLink 定時對View進行定時重繪可能會第一時間想到使用NSTimer,但是這樣的動畫實現起來是不流暢的,因為在…

《ASP.NET Core 6框架揭秘》實例演示[27]:ASP.NET Core 6 Minimal API的模擬實現

Minimal API僅僅是在基于IHost/IHostBuilder的服務承載系統上作了小小的封裝而已,它利用WebApplication和WebApplicationBuilder這兩個類型提供了更加簡潔的API,同時提供了與現有API的兼容。[本文節選《ASP.NET Core 6框架揭秘》第17章]一、基礎模型二、…

Mysql的關聯查詢語句

一 內連接( inner join) 1、多表中同時符合某種條件的數據記錄的集合 (取兩表公共部分) 2、inner join 可以縮寫成 join 例如: select * from A,B WHERE A.idB.id 或者 select * from A inner join B on A.idB.id 內連接分為三類:{ (1&#xff0…

高性能Server---Reactor模型

無處不在的C/S架構 在這個充斥著云的時代,我們使用的軟件可以說99%都是C/S架構的! 你發郵件用的Outlook,Foxmail等你看視頻用的優酷,土豆等你寫文檔用的Office365,googleDoc,Evernote等你瀏覽網頁用的IE,Chrome等(B/S是特殊的C/S)……C/S架構…

計算機控制系統的試題,計算機控制系統練習題(1)

21. 給出多通道復用一個D/A轉換器的原理示意圖。 答:22. 什么是信號重構?答:把離散信號變為連續信號的過程,稱為信號重構,它是采樣的逆過程。23. 寫出零階保持器的傳遞函數,引入零階保持器對系統開環傳遞函…

springmvc_3(將數據放入map中)

jsp頁面 結果 轉載于:https://www.cnblogs.com/mohehpc/p/6491376.html

怎樣用原生js配合css的transition寫個無縫滾動

之所以想要寫原生js配合css轉換的無縫滾動,是因為之前在簡書上看到一哥們寫的一篇文章,說是在網上找了一堆js配合css transition屬性寫的輪播插件,可惜沒有無縫的效果,結果他用原生js重寫了一個可以無縫滾動的。好吧,我…

聊聊策略模式

1、簡介策略模式就是把各個平等的具體實現進行抽象、封裝成為獨立的算法類,然后通過上下文和具體的算法類來進行交互。各個策略算法都是平等的,地位是一樣的,正是由于各個算法的平等性,所以它們才是可以相互替換的。雖然我們可以動…

小學計算機課每周幾節,小學信息技術課時多少

滿意答案小學信息技術課程標準一、課程任務和教學目標中小學信息技術課程的主要任務是:培養學生對信息技術的興趣和意識,讓學生了解和掌握信息技術基本知識和技能,了解信息技術的發展及其應用對人類日常生活和科學技術的深刻影響。通過信息技…

張旭升20162329 2006-2007-2 《Java程序設計》第一周學習總結

20162329 2006-2007-2 《Java程序設計》第一周學習總結 教材學習內容總結 通過打書上的代碼熟悉了Java編程的基本過程 教材學習中的問題和解決過程 1.因為我的虛擬機不可用所以我在Windows中安裝了bash和git,但是由于Windows下bash中沒有中文而且我英語又不是很好所…

《圖解 HTTP》讀書筆記(未完待續)

ARP 協議(Address Resolution Protocol)一種以解析地址的協議,根據通信雙方的 IP 地址就可以查出對應的 MAC 地址。MAC( Media Access Control Address)地址是指網卡所屬的固定的地址MIME,多部分對象集合&a…

SQL查詢的安全方案

1.使用預處理語句防sql注入 2.寫入數據庫的數據要進行特殊字符轉義 3.錯誤信息不返回給用戶,記錄到日志 4.定期做數據備份 5.不給查詢用戶root權限,合理分配權限 6.關閉遠程訪問數據庫權限 7.修改root口令,不使用默認口令,使用較復雜口令 8.刪除多余的用戶 9.改變root用戶的名稱…

.NET 實現啟動時重定向程序運行路徑及 Windows 服務運行模式部署

日常工作中有時候會遇到需要將程序直接在服務器上運行,而不依賴于 IIS 托管的情況,直接運行有兩種方式,一種是部署為 服務模式,另一種則是 直接啟動 .NET 發布之后的 exe 文件以 控制臺模式運行,控制臺模式運行主要問題…

iOS runtime實戰應用:關聯對象

在開始之前建議先閱讀iOS runtime的基礎理解篇:iOS內功篇:runtime 有筒子在面試的時候,遇到這樣一個問題:“如何給NSArray添加一個屬性(不能使用繼承)”,筒子立馬蒙逼了,不能用繼承&…

黑龍江科技大學計算機考研復試科目,2020年黑龍江科技大學計算機應用技術考研經驗分享...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓育明考研備考策略隨著IT業的迅猛發展,各高校計算機專業報名火爆,甚至文科學生跨專業報考時都會選擇計算機。計算機專業競爭日趨激烈,那么如何在充分發揮公共科目優勢的同時,盡量縮小專…

Mysql數據庫安全性問題【防注入】

一、SQL注入實例 后臺的插入語句代碼: $unsafe_variable $_POST[user_input]; mysql_query("INSERT INTO table (column) VALUES ($unsafe_variable)"); 當POST的內容為: value); DROP TABLE table;--以上的整個SQL查詢語句變成&#xff1…