MySQL實戰面試題_Mysql實戰面試題

該樓層疑似違規已被系統折疊?隱藏此樓查看此樓

一、索引B+ Tree 原理1. 數據結構

B Tree 指的是 Balance Tree,也就是平衡樹。平衡樹是一顆查找樹,并且所有葉子節點位于同一層。

B+ Tree 是基于 B Tree 和葉子節點順序訪問指針進行實現,它具有 B Tree 的平衡性,并且通過順序訪問指針來提高區間查詢的性能。

在 B+ Tree 中,一個節點中的 key 從左到右非遞減排列,如果某個指針的左右相鄰 key 分別是 keyi 和 keyi+1,且不為 null,則該指針指向節點的所有 key 大于等于 keyi 且小于等于 keyi+1

2. 操作

進行查找操作時,首先在根節點進行二分查找,找到一個 key 所在的指針,然后遞歸地在指針所指向的節點進行查找。直到查找到葉子節點,然后在葉子節點上進行二分查找,找出 key 所對應的 data。

插入刪除操作會破壞平衡樹的平衡性,因此在插入刪除操作之后,需要對樹進行一個分裂、合并、旋轉等操作來維護平衡性。

3. 與紅黑樹的比較

紅黑樹等平衡樹也可以用來實現索引,但是文件系統及數據庫系統普遍采用 B+ Tree 作為索引結構,主要有以下兩個原因:

(一)更少的查找次數

平衡樹查找操作的時間復雜度和樹高 h 相關,O(h)=O(logdN),其中 d 為每個節點的出度。

紅黑樹的出度為 2,而 B+ Tree 的出度一般都非常大,所以紅黑樹的樹高 h 很明顯比 B+ Tree 大非常多,查找的次數也就更多。

(二)利用磁盤預讀特性

為了減少磁盤 I/O 操作,磁盤往往不是嚴格按需讀取,而是每次都會預讀。預讀過程中,磁盤進行順序讀取,順序讀取不需要進行磁盤尋道,并且只需要很短的旋轉時間,速度會非常快。

操作系統一般將內存和磁盤分割成固定大小的塊,每一塊稱為一頁,內存與磁盤以頁為單位交換數據。數據庫系統將索引的一個節點的大小設置為頁的大小,使得一次 I/O 就能完全載入一個節點。并且可以利用預讀特性,相鄰的節點也能夠被預先載入。

MySQL 索引

索引是在存儲引擎層實現的,而不是在服務器層實現的,所以不同存儲引擎具有不同的索引類型和實現。

1. B+Tree 索引

是大多數 MySQL 存儲引擎的默認索引類型。

因為不再需要進行全表掃描,只需要對樹進行搜索即可,所以查找速度快很多。

除了用于查找,還可以用于排序和分組。

可以指定多個列作為索引列,多個索引列共同組成鍵。

適用于全鍵值、鍵值范圍和鍵前綴查找,其中鍵前綴查找只適用于最左前綴查找。如果不是按照索引列的順序進行查找,則無法使用索引。

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

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

相關文章

Redux有何優點?

by Justin Falcone賈斯汀法爾科內(Justin Falcone) Redux有何優點? (What’s So Great About Redux?) Redux elegantly handles complex state interactions that are hard to express with React’s component state. It is essentially a message-passing syste…

python基礎——使用模塊

python基礎——使用模塊 Python本身就內置了很多非常有用的模塊,只要安裝完畢,這些模塊就可以立刻使用。 我們以內建的sys模塊為例,編寫一個hello的模塊: #!/usr/bin/env python3 # -*- coding: utf-8 -*- a test module __author…

力扣——鍵盤行

給定一個單詞列表,只返回可以使用在鍵盤同一行的字母打印出來的單詞。鍵盤如下圖所示。 示例: 輸入: ["Hello", "Alaska", "Dad", "Peace"] 輸出: ["Alaska", "Dad"]注意: 你可…

網絡空間技術實驗室:打造信息安全技術培育平臺

從PC互聯網到移動互聯網,音視頻、圖片越來越成為大眾關注的熱點。過去,人們習慣于在網絡瀏覽文字新聞;今天,人們對于視頻新聞、圖片新聞的接受度更高。 網絡的發展無疑給人們帶來了便利。但同時,一個不可否認的事實是&…

如何對mysql做物理備份_如何創建物理MySQL備份

前提條件在開始之前,確保你有一個有sudo權限的用戶和一個MySQL數據庫服務器。查找數據目錄使用root密碼登錄到MySQL服務器。$ sudo mysql -u root -p下面的SQL顯示MySQL實例的數據目錄。mysql> select datadir;輸出類似于-----------------| datadir |----------…

freecodecamp_1000天的freeCodeCamp

freecodecampToday, the freeCodeCamp community turns 1,000 days old. We’ve accomplished a lot together in that time:今天,freeCodeCamp社區已經有1000天的歷史了。 到那時我們已經共同完成了很多工作: 6,000 campers have gotten their first d…

如何正確遍歷刪除List中的元素,你會嗎?

遍歷刪除List中的元素有很多種方法,當運用不當的時候就會產生問題。下面主要看看以下幾種遍歷刪除List中元素的形式: 1.通過增強的for循環刪除符合條件的多個元素 2.通過增強的for循環刪除符合條件的一個元素 3.通過普通的for刪除刪除符合條件的多個元素…

Jmeter 通過json Extracted 來獲取 指定的值的id

在沒有 精確或模糊查詢的接口時可以使用jmeter 獲取指定的值的ID import java.lang.String ; String getTargetName"iphone632g"; //判讀相應結果中是否包含指定值:iphone632g boolean containsCategoryprev.getResponseDataAsString().contains(getTarge…

mysql 結果保存到文件_將MySQL中sql運行結果保存到文件

將MySQL中sql運行結果保存到文件有兩種方法。方法一:在mysql>提示符中使用teemysql> tee output.txtLogging to file output.txtmysql> noteeOutfile disabled.或者mysql> \T output.txtLogging to file output.txtmysql> \tOutfile disabled.這個類…

獲取電腦和操作系統信息-uname

用法:uname [選項]...輸出一組系統信息。如果不跟隨選項,則視為只附加-s 選項。-a, --all 以如下次序輸出所有信息。其中若-p 和-i 的探測結果不可知則被省略:-s, --kernel-name 輸出內核名稱-n, --nodename 輸出網絡節點…

MobileSpace-關于我的激情的故事

by Monte Thakkar通過Monte Thakkar MobileSpace-關于我的激情的故事 (MobileSpace — A story about my passions) 我發現,學習和教授iOS開發的旅程 (My journey to discovering, learning, and teaching iOS development) “Let this be the first thing you hea…

Do you have an English name? 你有英文名嗎?

文中提到的所有人名都是虛構的,如有雷同,純屬巧合。當然,你的洋名兒也可能是德文、法文、意大利文,等々々々。 全球化時代,和老外的交流也多了。“高端”的程序員想要進歐美系外企,想要出國看世界&#xff…

php+nginx導入太大文件報http error錯誤的原因

項目中用到太多的導入導出,最近換了服務器,導致一旦文件過大就出現http error的錯誤,查找后是配置文件沒有同步的原因,php.ini需要幾個配置 upload_max_filesize 20M 表示上傳的最大文件為20M post_max_size 20M 允許post提交的…

rhel 7.2 安裝mysql_在rhel7.2下源碼安裝mysql-5.6.35

如何在一臺新機rhel7.2下源碼安裝mysql-5.6.35一、前期準備工作1、首先安裝依賴包,避免在安裝過程中出現問題yum -y install gcc gcc-c cmake ncurses-devel autoconf perl perl-devel2、下載源碼包3、創建mysql安裝目錄以及數據存放目錄[[email protected] liuzhen…

網絡安全不是奢侈品,而是必需品

2016年國家網絡安全宣傳周于9月19日至25日在武漢隆重舉辦。《長江日報》記者高萌采訪了思科全球副總裁、大中華區首席技術官曹圖強,以下是9月19日《長江日報》刊登的采訪全文: 思科全球副總裁、大中華區首席技術官曹圖強昨日下午,思科全球副總…

開源開發平臺_電線之間:開源開發商Sindre Sorhus的采訪

開源開發平臺by Vivian Cromwell通過維維安克倫威爾(Vivian Cromwell) 電線之間:開源開發商Sindre Sorhus的采訪 (Between the Wires: An interview with open source developer Sindre Sorhus) Here’s my interview Sindre Sorhus, a prolific open source devel…

白宮力挺FBI:庫克干擾司法與正義

據中文業界資訊站報道,眼看著谷歌、Mozilla、Facebook等大組織都開始聲援庫克,美國白宮也就關于要求蘋果協助解鎖iPhone調查加州槍擊案的事件作出了回應。白宮新聞秘書Josh Earnest強調,FBI并沒有要求蘋果重新設計產品或者是給它們留后門&…

UUID,加密解密算法的使用

注意的地方: Base64Encoder,Base64Decoder并不屬于JDK標準庫范疇,但是又包含在了JDK中 解決方法:按照如下方法設置Eclipse導入%JAVA_HOME%\jre\lib目錄下的rt.jar包即可,Project->Properties,選擇Java Build Path設…

sae mysql 同步本地_MYSQL入門之三_將本地MySQL數據導入SAE數據庫_MySQL

bitsCN.comMYSQL入門之三_將本地MySQL數據導入SAE數據庫1. MySQL字符集MySQL的默認字符集是latin1,將本地MySQL庫導出成sql,再導入到SAE的MySQL時中文字符出現亂碼,解決方法是將本地mysql默認字符集也設成utf8查看當前MySQL字符集mysql> s…

vim block vim_我如何學會愛Vim

vim block vimby Sanchit Gera通過Sanchit Gera 我如何學會愛Vim (How I learned to love Vim) I’ve had a bitter-sweet relationship with Vim for a long time.我與Vim有一段苦甜的戀情。 Over the last couple of years, I tried to learn Vim on several occasions. Ea…