MySQL索引面試題(高頻)

文章目錄

  • 前言
  • 什么時候需要(不需要))使用索引?
  • 有哪些優化索引的方法
    • 前綴索引優化
    • 索引覆蓋優化
    • 索引失效場景
  • 總結


前言

今天來講一講 MySQL 索引的高頻面試題。主要是針對前一篇文章 MySQL索引入門(一文搞定)進行查漏補缺,建議大家看完前一篇再看這一篇。


什么時候需要(不需要))使用索引?

我們先來看看索引的優缺點吧。

優點:可以快速查詢的效率,查詢是在增刪改查中最經常使用。

缺點:創建索引是要用到物理空間的。其次維護索引,當數據庫進行增刪改的時候,索引也要動態的進行變化。這樣子的話過多的索引會影響到數據庫的增刪改性能。

從優缺點我們來切入什么需要使用索引,什么時候不需要索引

什么時候需要使用索引?

  1. 當字段經常出現在 where 當做條件中,我們可以考慮根據字段添加索引。
  2. 當字段經常出現在 order By 和 Group By 時,我們可以考慮根據字段添加索引。
  3. 當字段頻繁的查詢,而少更新時,我們可以考慮根據字段添加索引。

什么時候不需要使用索引?

  1. 反之,將字段頻繁的更新時,不需要使用索引,因為索引的意義就是加速查詢,既然用不上就不需要創建了。

  2. 當數據量少時,不用因為查詢性能慢而煩惱時,就不需要使用索引。

  3. 當字段經常設計計算、函數等操作時,不需要使用索引,因為這會造成索引失效。

  4. 當有 where,order by ,group by 等關鍵詞使用不到的字段,不需要使用索引,因為索引的價值是快速定位,這樣子的話提現不出價值而且索引會占用物理空間。

  5. 當有字段存儲了大量的重復數據時,不需要創建索引,比如性別,只有男/女兩種值,這時候的索引是起不到作用的。因為MySQL 有個優化器會在執行前將SQL進行優化,如果有太多重復的數據,優化器默認是不會使用索引的。

有哪些優化索引的方法

前綴索引優化

前綴索引優化就是當類型為字符串(比如:varchar)的字段,該字段過長時,我們可以使用前綴索引就是將該字段的前幾個字符作為索引。

這樣子既可以節省空間,又可以起到索引優化查詢的性能。

當然這種也有缺點。

  1. order by 無法使用前綴索引
  2. 前綴索引無法起到索引覆蓋優化。

索引覆蓋優化

索引覆蓋優化一般是使用聯合索引,就是B+樹的葉子結點是包含索引(key)和數據(data)的。當使用聯合索引時
,如果聯合索引中的值包含了我們需要查詢的值,那么就不用進行回表查詢了。回表查詢就是根據這次查詢到的索引值再進行一次查詢。

比如學生表,我們要查詢出studentName,studentPhone,其中card(身份證卡號)是唯一值,我們創建聯合索引(card、studentName、studentPhone)。然后我們使用SQL語句進行查詢

select card,studentName, studentPhone from student where card = '445122335464654654463'

這樣子就是索引覆蓋優化拉。

索引失效場景

就不詳細解釋了,大家感興趣底層原理可以閱讀 “小林coding”的網站。

  1. 當like關鍵字進行左模糊(%xx)查詢和左右模糊(%xx%)查詢時會失效。因為索引是整個值,進行左模糊的話無法匹配出來。
  2. 當索引字段進行計算,函數,類型轉化時,會出現索引失效。
  3. 當聯合索引不符合最左匹配原則時會出現索引失效。
  4. where 條件字段中,如果 OR 前字段是索引列,后字段不是,會索引失效。

總結

總的來說,我們只要符合索引的優缺點就可以知道索引該如何使用拉。優點:快速查詢,缺點:浪費空間,影響數據更新性能。

最后建議大家都可以去讀一讀 小林coding網站的索引篇,知道底層原理,知識才更牢固。


有啟發點個贊 🌹

好文章不要錯過,最近給大家分享的文章

MySQL的基礎知識

1.MySQL的基礎架構
2.SQL語句的執行流程
3.MySQL 的存儲引擎

MySQL 索引

1.MySQL索引入門(一文搞定)

預計下篇分享:MySQL 事務基礎知識

本篇參考:小林coding ,JavaGuide

我是小輝,正在進行 Java 實習的 24 屆應屆畢業生。歡迎關注,持續分享,包括但不限于技術文章。全網同名…

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

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

相關文章

虛擬機的內存結構

一、摘要 熟悉 Java 語言特性的同學都知道,相比 C、C 等編程語言,Java 無需通過手動方式回收內存,內存中所有的對象都可以交給 Java 虛擬機來幫助自動回收;而像 C、C 等編程語言,需要開發者通過代碼手動釋放內存資源&…

MedicalGPT 訓練醫療大模型,實現了包括增量預訓練、有監督微調、RLHF(獎勵建模、強化學習訓練)和DPO(直接偏好優化)

MedicalGPT 訓練醫療大模型,實現了包括增量預訓練、有監督微調、RLHF(獎勵建模、強化學習訓練)和DPO(直接偏好優化)。 MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 訓練醫療大模型,實現了包括增量預訓練、有監督微…

Linux第63步_為新創建的虛擬機添加必要的目錄和安裝支持linux系統移植的軟件

1、創建必要的目錄 1)、創建“/home/zgq/linux/”目錄 打開終端,進入“/home/zgq/”目錄 輸入“mkdir linux回車”,創建“/home/zgq/linux/”目錄 輸入“ls回車”,列舉“/home/zgq/”目錄的所有文件和文件夾 創建好“/home/zgq/linux/”…

EIS(防抖):meshflow算法 C++實現

視頻防抖的應用 對視頻防抖的需求在許多領域都有。 這在消費者和專業攝像中是極其重要的。因此,存在許多不同的機械、光學和算法解決方案。即使在靜態圖像拍攝中,防抖技術也可以幫助拍攝長時間曝光的手持照片。 在內窺鏡和結腸鏡等醫療診斷應用中&…

Go 中的 init 如何用?它的常見應用場景有哪些呢?

嗨,大家好!我是波羅學。本文是系列文章 Go 技巧第十六篇,系列文章查看:Go 語言技巧。 Go 中有一個特別的 init() 函數,它主要用于包的初始化。init() 函數在包被引入后會被自動執行。如果在 main 包中,它也…

QT基本組件

四、基本組件 Designer 設計師(重點) Qt包含了一個Designer程序,用于通過可視化界面設計開發界面,保存文件格式為.ui(界面文件)。界面文件內部使用xml語法的標簽式語言。 在Qt Creator中創建文件時&#xf…

滾雪球學Java(67):深入理解 TreeMap:Java 中的有序鍵值映射表

咦咦咦,各位小可愛,我是你們的好伙伴——bug菌,今天又來給大家普及Java SE相關知識點了,別躲起來啊,聽我講干貨還不快點贊,贊多了我就有動力講得更嗨啦!所以呀,養成先點贊后閱讀的好…

機器人內部傳感器閱讀筆記及心得-位置傳感器-旋轉變壓器、激光干涉式編碼器

旋轉變壓器 旋轉變壓器是一種輸出電壓隨轉角變化的檢測裝置,是用來檢測角位移的,其基本結構與交流繞線式異步電動機相似,由定子和轉子組成。 旋轉變壓器的原理如圖1所示,定子相當于變壓器的一次側,有兩組在空間位置上…

MyBatis-Plus 優雅實現數據加密存儲

文章目錄 前言一、數據庫字段加解密實現1. 定義加密類型枚舉2. 定義AES密鑰和偏移量3. 配置定義使用的加密類型4. 加密解密接口5. 解密解密異常類6. 加密解密實現類6.1 AES加密解密實現類6.2 Base64加密解密實現類 7. 實現數據庫的字段保存加密與查詢解密處理類8. MybatisPlus配…

使用python進行量化交易

yfinance yfinance國內不能使用,可以使用tushare、akshare代替 import yfinance as yf# 輸入股票代碼 stock_symbol AAPL # 替換為你想要查詢的股票代碼# 獲取股票數據 data yf.download(stock_symbol)# 打印實時數據 print(data)pip install akshare import …

Selenium安裝與配置

文章目錄 一、selenium安裝1. Python環境準備:2. 安裝Selenium:3. 瀏覽器驅動安裝:4. 驗證安裝: 二、常見問題1. Selenium版本與瀏覽器驅動程序不兼容:2. 瀏覽器驅動程序路徑未正確設置: Selenium是一個用于…

2024年1月手機市場行業分析:蘋果手機份額驟降,國產高端手機成功逆襲!

小米Ultra發布。 一方面,我們有望看到國產手機再一次超越自己的決心,繼續創新追逐高端;另一方面,我們也不得不正視目前手機市場所面臨的危機狀態。 2024年1月的線上手機市場遠不如去年。根據鯨參謀數據顯示,今年1月京…

Qt(C++)面試題 | 精選25項常問

面試是每個求職者都必須經歷的一關,而QT面試更是需要面試者有深厚的編程基礎和豐富的實戰經驗。下面我們為大家整理了25道QT面試題,希望能夠幫助大家在求職路上獲得成功。 ?Qt 中常用的五大模塊是哪些? Qt 中常用的五大模塊包括: QtCore:提供了 Qt 的核心功能,例如基本的…

Java面試題之分布式/微服務篇

經濟依舊不景氣啊,如此大環境下Java還是這么卷,又是一年一次的金三銀四。 兄弟們,你準備好了嗎?沖沖沖!歐里給! 分布式/微服務相關面試題解 題一:CAP理論,BASE理論題二:…

深度神經網絡

包括:深度前饋神經網絡、深度卷積神經網絡、深度循環神經網絡 深度神經網絡全面概述:從基本概念到實際模型和硬件基礎-騰訊云開發者社區-騰訊云

MQL語言實現JSON協議庫

文章目錄 一、MQL語言實現JSON協議的意義二、定義JSON數據枚舉類型簡單數據類型復雜數據類型枚舉數據類型定義類變量清理與賦值方法構造與析構方法重載運算符添加與設置方法序列化與反序列方法 一、MQL語言實現JSON協議的意義 數據交互:JSON是一種輕量級的數據交換格…

【2024軟件測試面試必會技能】Postman(1): postman的介紹和安裝

Postman的介紹 Postman 是一款谷歌開發的接口測試工具,使API的調試與測試更加便捷。 它提供功能強大的 Web API & HTTP 請求調試。它能夠發送任何類型的HTTP 請求 (GET, HEAD, POST, PUT..),附帶任何數量的參數 headers。 postman是一款支持http協議的接口調試…

【PTA|函數題|期末復習】指針

目錄 6-1 計算兩數的和與差(5分) 函數接口定義: 裁判測試程序樣例: 輸入樣例: 輸出樣例: 代碼 6-2 拆分實數的整數與小數部分 (5分) 函數接口定義: 裁判測試程序樣例: 輸入…

springboot整合mybatisPlus超級詳細

springboot整合mybatis-plus超級詳細 一、環境二、springboot整合myBatisPlus2.1新建2.2 添加Mybatis-plus和mysql依賴2.3 修改配置文件2.4 新建包和文件2.5 新建表2.6 創建實體類2.7 創建Mapper接口2.8 創建Service接口2.9 創建Service實現類2.10 增刪改查 MyBatis-Plus&#…

C# Onnx 使用onnxruntime部署實時視頻幀插值

目錄 介紹 效果 模型信息 項目 代碼 下載 C# Onnx 使用onnxruntime部署實時視頻幀插值 介紹 github地址:https://github.com/google-research/frame-interpolation FILM: Frame Interpolation for Large Motion, In ECCV 2022. The official Tensorflow 2…