MySQL 聚集索引和二級索引

来源:https://www.cnblogs.com/jmcui/archive/2020/03/16/12502828.html
-Advertisement-
Play Games

Clustered and Secondary Indexes(聚集索引和二級索引) Every InnoDB table has a special index called the clustered index where the data for the rows is stored. Ty ...


Clustered and Secondary Indexes(聚集索引和二級索引)

Every InnoDB table has a special index called the clustered index where the data for the rows is stored. Typically, the clustered index is synonymous with the primary key. To get the best performance from queries, inserts, and other database operations, you must understand how InnoDB uses the clustered index to optimize the most common lookup and DML operations for each table.

每張使用 InnoDB 作為存儲引擎的表都有一個特殊的索引稱為聚集索引,它保存著每一行的數據,通常,聚集索引就是主鍵索引。為了得到更高效的查詢、插入以及其他的資料庫操作的性能,你必須理解 InnoDB 引擎是如何使用聚集索引來優化常見的查找和 DML 操作。

  • When you define a PRIMARY KEY on your table, InnoDB uses it as the clustered index. Define a primary key for each table that you create. If there is no logical unique and non-null column or set of columns, add a new auto-increment column, whose values are filled in automatically.
    如果你的表定義了一個主鍵,InnoDB 就使用它作為聚集索引。因此,儘可能的為你的表定義一個主鍵,如果實在沒有一個數據列是唯一且非空的可以作為主鍵列,建議添加一個自動遞增列作為主鍵列。

  • If you do not define a PRIMARY KEY for your table, MySQL locates the first UNIQUE index where all the key columns are NOT NULL and InnoDB uses it as the clustered index.
    如果你的表沒有定義主鍵,InnoDB 會選擇第一個唯一非空索引來作為聚集索引。

  • If the table has no PRIMARY KEY or suitable UNIQUE index, InnoDB internally generates a hidden clustered index named GEN_CLUST_INDEX on a synthetic column containing row ID values. The rows are ordered by the ID that InnoDB assigns to the rows in such a table. The row ID is a 6-byte field that increases monotonically as new rows are inserted. Thus, the rows ordered by the row ID are physically in insertion order.
    如果你的表既沒有主鍵,又沒有合適的唯一索引,InnoDB 內部會生成一個隱式聚集索引 —— GEN_CLUST_INDEX,該索引建立在由 rowid 組成的合成列上。數據行根據 InnoDB 分配的 rowid 排序,rowid 是一個 6 位元組的欄位,隨著數據插入而單調遞增。也就是說,數據行根據 rowid 排序實際上是根據插入順序排序。

How the Clustered Index Speeds Up Queries(聚集索引如何提升查詢效率)

Accessing a row through the clustered index is fast because the index search leads directly to the page with all the row data. If a table is large, the clustered index architecture often saves a disk I/O operation when compared to storage organizations that store row data using a different page from the index record.
通過聚集索引來訪問一行數據是非常快的,這是因為所有的行數據和索引在同一頁上。如果表特別大,相較於行數據和索引在不同頁上存儲結構(比如 myisam 引擎),這將大大節省磁碟 I/O 資源。

How Secondary Indexes Relate to the Clustered Index(二級索引和聚集索引如何關聯)

All indexes other than the clustered index are known as secondary indexes. In InnoDB, each record in a secondary index contains the primary key columns for the row, as well as the columns specified for the secondary index. InnoDB uses this primary key value to search for the row in the clustered index.
除了聚集索引外的其他索引類型都屬於二級索引。在 InnoDB 中,二級索引中的每個記錄都包含該行的主鍵列,以及二級索引指定的列;聚集索引中,InnoDB 通過主鍵值來查詢數據行。

If the primary key is long, the secondary indexes use more space, so it is advantageous to have a short primary key.
如果主鍵過長,二級索引就需要更大的空間,因此,使用短的主鍵列是很有利的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] oracle生產備份方案 crontab 配置 周末全量備份,其他日期增量備份,清除15天以前文件 rman_backup_0.sh !/bin/bash source ~/.bash_profile rq= rman target / log /backup/log/rmanbacku ...
  • [toc] oracle自定義splitstr 有時候我們需要將('a,b,c,d')字元分割開,這個時候就需要oracle自定義一個splitstr函數,操作起來非常簡單,執行下麵的function就可以了。 ...
  • [toc] oracle中wm_concat oracle中wm_concat標識符無效原因: 11gr2和12C上已經摒棄了wm\_concat函數,當時我們很多程式員在程式中確使用了該函數,導致程式出現錯誤,為了減輕程式員修改程式的工作量,只有通過手工創建個wm\_concat函數,來臨時解決該 ...
  • [toc] oracle加密encrypt,解密decrypt 有的oracle版本沒有加解密函數,以下操作可以手動添加 oracle數據使用加密解密,我們首先要先賦予dbms_crypto許可權給用戶。 加密 解密 ...
  • 在測試環境中我們需要每天備份oracle中的數據,以便錯誤的操作、測試或者覆蓋其中有價值的數據,暫時不考慮生產環境的全量增量備份策略,本文只是簡單的oracle資料庫使用expdp命令設置定時任務備份數據。 ...
  • [toc] 阿裡雲centos安裝oracle 阿裡雲預設沒有swap分區,oracle安裝需要 創建swap分區是為了彌補物理記憶體的不足,也就是虛擬記憶體的概念,把硬碟的一部分劃分作為虛擬記憶體,但這個空間不是越大越好,硬碟的速度遠低於記憶體,設置不當反而拖慢系統的速度。 阿裡雲的主機預設沒有swap分 ...
  • 我們大家鏈接這個資料庫可能都用root作為用戶名!但預設不可以遠程訪問!如果要遠程訪問怎麼處理呢?1 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;2 FLUSH PRIVIL... ...
  • 本文檔主要是用來解決物理備庫的性能監控問題。我們都知道,當物理備庫出現問題的時候,由於備庫是只讀模式的,所以無法在備庫上使用AWR/Statspack/ash/addm等性能報告來分析。因此,在故障分析和調優應用的時候,只能手動收集相關的統計數據信息,這樣給我們的工作帶來了巨大的不變。隨著Oracl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...