MySQL 索引使用(二)

本篇繼續介紹有關索引的使用。

目錄

一、SQL提示

?二、單列索引和聯合索引

三、覆蓋索引

四、前綴索引

?五、索引的使用原則


一、SQL提示

我們在使用索引來進行查詢時,很有可能會出現一個字段中包含多個索引的情況,例如這里有一個name字段,該字段關聯了兩個索引

當我們根據這個字段進行查詢時,這兩個索引都有可能會用到?那為什么最后用了i_n_g這個索引呢?這是MySQL替我們選擇的,那可不可以指定使用哪個索引呢?其實是可以的,我們只需要在查詢時給MySQL一個提示,讓其使用某個索引,但這僅僅只是提示,具體使用哪個索引,還需要MySQL自行進行評估選擇。

下面我們再來進行一次前面的查詢語句,并提示MySQL要使用?i_u_n這個索引

語法如下:

select 字段名 from 表名 use index(要使用的索引名) 查詢條件

我們還可以提示MySQL要忽略某個索引,具體如下:

select 字段名 from 表名 ignore?index(要忽略的索引名) 查詢條件

?

我們也可以強制MySQL使用某個索引?,具體如下:

select 字段名 from 表名 force?index(要強制使用的索引名) 查詢條件

?二、單列索引和聯合索引

在MySQL中,我們可以根據單個字段構建索引(單列索引),也可以根據多個字段共同創建索引。單列索引的結構為B+Tree,并根據這單個字段的值進行大小比較。

聯合索引同樣為B+Tree結構,它會先根據最左邊的字段來建樹,如果最左邊的字段值相同,則會以后一個字段值進行比較,以此類推。

?

三、覆蓋索引

前面的文章中我們介紹過索引可以根據存儲方式?的不同分為聚集索引和二級索引,聚集索引的葉子節點中包含一整條記錄,而葉子節點的值則只包含索引的字段和主鍵字段的值。因此,在使用二級索引來進行查詢時,如果查詢的字段不只有索引的字段和主鍵的字段,那么將會進行回表操作,但如果查詢的字段包括在索引的字段和主鍵的字段里,那么將不會回表,直接就能返回查詢結果,此時使用的索引就可以稱之為覆蓋索引。

例如,下面這條SQL

(該表包含id,name,age三個字段)?

可以發現,這條SQL查詢的字段除了索引的字段(name)和主鍵的字段(id)外,還有一個age字段,因此,該次查詢回表了,該索引也就不是覆蓋索引。

我們通過profile來查看一下此次查詢的時間

接下來我們再刪掉name字段的索引,然后再根據name和age字段來創建一個聯合索引?

此時我們再進行前面的查詢語句,然后再通過profile查看一下執行時間?

?

可以發現這次查詢要更快一點,這是因為查詢的字段全部包含在聯合索引和主鍵的字段里了,此次次使用的索引為覆蓋索引,不再回表了。因此,我們還可以得出一個經驗:當查詢的字段比較多時,盡量創建聯合索引來形成覆蓋索引,從而避免回表操作,增強查詢的效率。

四、前綴索引

當我們對字符串類型的字段創建索引時,需要對該字段的值進行比較,而字符串的比較,需要比較字符串中的字符,如果字符串比較長的話,那么比較的時間就會比較長,例如“hello,word”和“hello,words”需要比較10次才能比較出結果,這樣就會導致比較所消耗的時間較長,影響查詢的性能,因此我們可以選擇只取該字符串的前綴來進行比較,這樣就能讓比較消耗的性能更少一點。像這種只比較字符串前綴創建的索引就為前綴索引,下面我們來看一下如何創建前綴索引。

創建前綴索引的語法如下:

create index? 索引名 on 表名(字段名(前綴長度))?

這里有一個name字段?,我們給它加上一個前綴索引:

此時,我們就給name字段創建好長度為5的前綴索引了。

?這個前綴長度要怎么確定呢?我們可以枚舉前綴的長度,并查看該長度的不重復的前綴占全部記錄的比值,如果該比值在某個值以上就可以以該長度作為前綴長度,例如,我們以1作為前綴長度,然后我們通過MySQL查詢比值,???????

可以發現這個比值較低,因此1不適合作為前綴長度?,我們再來看一下2作為前綴長度

此時比值達到了1因此2適合作為前綴長度。?

?五、索引的使用原則

索引的使用會大大提升我們的查詢效率,但索引并不是一定會生效,會有索引失效的情況場景出現,同時,索引也不一定就能提升查詢效率,有時甚至還會降低我們的查詢效率,因此正確的使用索引是尤為重要的,,下面我們來看一下索引使用時應遵循的原則。

  • 創建索引的表的數據量盡可能多,且該表的查詢操作占比要大于修改操作的占比。
  • 對需要進行查詢,排序,分組等操作的字段創建索引。
  • 如果字段為字符串類型,應盡量根據情況創建前綴索引。
  • 查詢的字段多時,盡量創建聯合索引,從而做到覆蓋索引。
  • 索引的數量不是越多越好,應當根據需求創建索引,不要不需要索引的字段也創建索引了
  • 如果索引的字段不能存放null值,盡量再建表時對該字段進行not null約束,當MySQL知道哪個字段不含NULL值時,能夠更好的確定使用哪個索引性能更好。

?

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

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

相關文章

從零開始學習Slam-旋轉矩陣旋轉向量四元組(二)

本文參考:計算機視覺life 僅作筆記用 書接上回,上回不清不楚的介紹了旋轉矩陣&旋轉向量和四元組 現在回顧一下重點: 本著繞誰誰不變的變則 假設繞z軸旋轉θ,旋轉矩陣為: 再回顧一下旋轉向量的表示以及這個基本記不…

SpringCloud如何實現SSO單點登錄?

目錄 一、SpringCloud框架介紹 二、什么是SSO單點登錄 三、單點登錄的必要性 四、SpringCloud如何實現SSO單點登錄 一、SpringCloud框架介紹 Spring Cloud是一個基于Spring Boot的微服務架構開發工具集,它整合了多種微服務解決方案,如服務發現、配置…

SpringSecurity6從入門到實戰之Filter過濾器回顧

SpringSecurity6從入門到實戰之Filter過濾器回顧 如果沒有SpringSecurity這個框架,我們應該通過什么去實現客戶端向服務端發送請求時,先檢查用戶是否登錄,登錄了才能訪問.否則重定向到登錄頁面 流程圖如下 官方文檔:https://docs.spring.io/spring-security/referen…

Ubuntu (18.04) _Mysql (8.0.X)設置密碼強度

首先 查看是否有密碼強度插件: SHOW PLUGINS; 如果沒有,則安裝 install plugin validate_password soname validate_password.so; 再次查看,會看到密碼強度插件已開 其次 查看密碼強度具體配置 show variables like validate_password%; validate…

【C++】【VScode】常用快捷鍵

在Visual Studio Code (VSCode) 中,有幾個快捷鍵可以幫助你更高效地編寫C代碼,特別是與代碼提示、自動完成等功能相關的快捷鍵。這些功能大多數依賴于安裝和配置好的C/C擴展(通常是由Microsoft提供的)。以下是幾個有助于代碼提示和…

echart擴展插件詞云echarts-wordcloud

echart擴展插件詞云echarts-wordcloud 一、效果圖二、主要代碼 一、效果圖 二、主要代碼 // 安裝插件 npm i echarts-wordcloud -Simport * as echarts from echarts; import echarts-wordcloud; //下載插件echarts-wordcloud import wordcloudBg from /components/wordcloudB…

uniapp實現圖片上傳——支持APP、微信小程序

uniapp實現圖片、視頻上傳 文章目錄 uniapp實現圖片、視頻上傳效果圖組件templatejs 使用 相關文檔: 結合 uView 插件 uni.uploadFile 實現 u-upload uploadfile 效果圖 組件 簡單封裝,還有很多屬性…,自定義樣式等…根據個人所需調整 te…

Nginx在Docker中的應用:容器化部署與擴展

在當今的云計算和微服務時代,Docker容器技術因其輕量級、可移植性和可擴展性而受到廣泛關注。Nginx,作為一個高性能的HTTP和反向代理服務器,也在Docker中找到了其廣泛的應用場景。本文將探討Nginx在Docker中的容器化部署和擴展策略&#xff0…

16:00面試,16:08就出來了,問的問題有點變態。。。

從小廠出來,沒想到在另一家公司又寄了。 到這家公司開始上班,加班是每天必不可少的,看在錢給的比較多的份上,就不太計較了。沒想到8月一紙通知,所有人不準加班,加班費不僅沒有了,薪資還要降40%…

【C語言】常見的動態內存的錯誤

前言 在動態內存函數的使用過程中我們可能會遇到一些錯誤,這里將常見的錯誤進行總結。 對NULL解引用 請看以下代碼: 可以看到,這時我們的malloc開辟是失敗的,所以返回的是空指針NULL,而我們卻沒有進行檢查&#xff0…

推薦:4本易發表的優質SSCI期刊,含期刊官網!

01、Risk Management and Healthcare Policy 開源四區,國人發表占比25%,發表量前三的國家分別是中國、埃塞俄比亞和美國。 該期刊對國人友好,年度發文量400多,影響因子3.6。 主要刊發公共衛生相關的文章。 研究者可以圍繞居民…

【C++ C#】 C++ 和C# 的混合項目,C++ 文件中有多個 函數和變量 定義了未使用,會影響程序正常執速度嗎?

文章目錄 1 未使用的函數和變量 是否會影響速度分析1.1 C 未使用的函數和變量:1.2 C# 未使用的函數和變量: 2 影響程序執行速度的其他因素3 如何處理未使用的代碼 一個 C 和C# 的混合項目,C 文件中有多個 函數和變量 定義了未使用&#xff0c…

推薦系統三十六式學習筆記:01|你真的需要個性化推薦系統嗎?

目錄 什么是推薦系統你需要推薦系統嗎總結 什么是推薦系統 讓我們來換一個角度回答三個問題,從而重新定義什么是推薦系統: 1、它能做什么? 2、它需要什么? 3、它怎么做。 對于第一個問題“它能做什么”,我的回答是:推…

2020年CSP-J入門級第一輪初賽真題

一、選擇題 在內存儲器中每個存儲單元都被賦予一個唯一的序號,稱為()。 A.地址 B. 序號 C. 下標 D. 編號 答案:A. 地址 在內存儲器中,每個存儲單元都有一個唯一的標識,用于區分和訪問不同的存儲單元。這個唯…

說說你對單例模式的理解?如何實現?

一、是什么 單例模式(Singleton Pattern):創建型模式,提供了一種創建對象的最佳方式,這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建 在應用程序運行期間&am…

day23--單元測試-反射-注解-動態代理

day23-單元測試、反射 恭喜同學們,Java主要的知識我們其實已經學習得差不多了。今天同學們再把單元測試、反射、注解、動態代理學習完。Java的基礎知識就算全齊活了。 首先,我們進入單元測試的學習。 一、單元測試 1.1 單元測試快速入門 所謂單元測…

北斗消防系統實現林海無信號應急通信,高效防災救災開拓應急救援新通道

最近,貴州多地爆發的重大山火,火勢 21日這12天里,貴州發生森林火情221起,當地包括武警、消防、專業救援隊伍等在內的9千多人連續撲救,1.5萬名基層黨員干部、民兵、群眾及志愿者協助救火。目前,貴州全省火災…

OSPF狀態機+SPF算法

OSPF狀態機 1.點到點網絡類型 down-->init-->(前提為可以建立鄰接)exstart——>exchange-->若查看鄰接的DBD 目錄后發現不用進行LSA 直接進入ful。若查看后需要進行查詢、應答先進入loading,在查詢應答完后再進入 fuIl: 2.MA網絡類型 down --&g…

【計算機網絡】——概述(圖文并茂)

概述 一.信息時代的計算機網絡二.互聯網概述1.網絡,互連網,互聯網(因特網)1.網絡2.互連網3.互聯網(因特網) 2.互聯網簡介1.互聯網發展的三個階段2.互聯網服務提供者(ISP)3.互聯網的組…

HTTP/超文本傳輸協議(Hypertext Transfer Protocol)及HTTP協議通信步驟介紹和請求、響應階段詳解;

目錄 一、HTTP/超文本傳輸協議 特點和功能 請求-響應模型 版本和擴展 安全性和加密 二、HTTP協議通信步驟介紹 三、請求、響應階段詳解 HTTP請求 HTTP響應 示例 一、HTTP/超文本傳輸協議 HTTP/超文本傳輸協議(Hypertext Transfer Protocol)是…