1. 程式人生 > >【MySQL】索引

【MySQL】索引

索引型別

B -Tree 索引

概念

B-Tree意味著所有的值都是按順序儲存的,並且每一個葉子頁到根的距離相同,B-Tree從索引的根節點開始搜尋,根節點槽中存放了指向子節點的指標,通過比較節點頁的值和要查詢的值可以找到合適的指標進入下層子節點

B-Tree索引適用於全鍵值、鍵值範圍或鍵字首查詢(最左字首),因為節點有序,可以用於查詢中 order by 操作

有效查詢

  1. 全值匹配:和索引中的所有列進行匹配

  2. 匹配最左字首:只使用索引的第一列

  3. 匹配列字首:匹配某一列的值的開頭部分

  4. 匹配範圍值:只使用索引的第一列

  5. 精確匹配某一列並範圍匹配另一列:第一列全匹配,第二列範圍匹配

限制

  • 若不是按照索引從最左列開始查詢,則無法使用索引

  • 不能跳過索引中的列

  • 查詢中有某個列的範圍查詢,則其右邊所有列無法使用索引進行優化查詢

雜湊索引

概念

雜湊索引基於雜湊表實現,只有精確匹配索引所有列的查詢才有效

對於每一行資料,儲存引擎都會對所有的索引列計算一個 hash code,雜湊碼是一個較小的值。雜湊索引將所有雜湊碼儲存在索引中,同時在雜湊表中儲存指向每個資料行的指標

限制

  • 雜湊索引包含雜湊值和行指標,不儲存欄位值

  • 雜湊索引不按照索引值順序儲存,無法用於排序

  • 雜湊索引不支援部分索引列匹配查詢,因為雜湊索引按照索引列的全部內容來計算

  • 雜湊索引只支援等值比較查詢,包括=、IN()、<=>,不支援範圍查詢

  • 訪問雜湊索引的速度非常快,除非有雜湊衝突(需要遍歷連結串列所有行指標)

空間資料索引(R-Tree)

MyISAM表支援空間索引,可以用作地理資料索引。

這類索引無須字首查詢,空間索引會從所有維度來索引資料

全文索引

全文索引查詢的是文字中的關鍵詞,而不是比較索引中的值

在相同列上可以同時建立全文索引和基於值的B-Tree索引,全文索引適用於 match against 操作

高效能索引策略

  1. 獨立的列:索引不能是表示式的一部分或函式的引數

  2. 字首索引和索引選擇性:索引開始的部分字元,節約索引空間,提高索引效率

  3. 多列索引:各列獨立索引最多有一星索引,多and應該用多列索引

  4. 選擇合適的索引列順序:正確的索引依賴於使用該索引的查詢,同時滿足排序和分組需要

  5. 聚簇索引:在同一個結構中儲存了 B-Tree 索引和資料行,資料訪問更快

  6. 覆蓋索引:索引包含素有需要查詢的欄位的值,可以極大的提高效能

  7. 使用索引掃描來做排序:只有索引的列順序和 order by 子句的順序完全一致,並且所有列的排序方向都一樣時,MySQL才能使用索引來對結果做排序

  8. 字首壓縮索引:MyISAM使用字首壓縮來減少索引大小,從而讓更多索引放入記憶體中,這在某些情況下能極大提高效能

  9. 冗餘和重複索引:相同的列上按照相同的順序建立相同型別的索引,應該避免這樣的重複索引

  10. 未使用的索引:有些是伺服器永遠不用的索引,建議刪除

  11. 索引和鎖:索引可以讓查詢鎖更少的行

相關推薦

3.MYSQL索引

MYSQL索引 Mysql索引四種索引 Mysql查詢索引的方式 索引的代價 複合索引左字首規則 執行計劃 索引使用的情況查詢 Mysql索引四種索引 主鍵索

MySQL索引

索引型別 B -Tree 索引 概念 B-Tree意味著所有的值都是按順序儲存的,並且每一個葉子頁到根的距離相同,B-Tree從索引的根節點開始搜尋,根節點槽中存放了指向子節點的指標,通過比較節點頁的值和要查詢的值可以找到合適的指標進入下層子節點 B-Tree

MySQL-索引

什麼是索引? 排好序的快速查詢資料結構 目的: 提高查詢效率 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結枘以某種方式引用(指向)資料, 這樣就可以在這些資料結構上實

Mysql索引簡介

本文口味:番茄炒蛋,預計閱讀:10分鐘。 部落格又停更了兩個月,在這期間,對人生和世界多了許多思考。在人生的不同階段,會對生活和世界有著不一樣的認知,而認知的改變也會直接反應在行為模式之中。 對於生活的思考心得也會在之後的時間裡,慢慢分享給大家,一方面是對自己心路歷程的記錄和總結,另一方面也希望能給遇到同樣問

MySQLMySQL索引

約束 記錄 col 因此 訪問 除了 color 要求 rst 索引是存放在模式中的一個數據庫對象,雖然索引總是從屬於數據表,但它也和數據表一樣屬於數據庫對象。創建索引的唯一作用就是加速對表的查詢,索引通過使用快速路徑訪問方法來快速定位數據,從而減少了磁盤的I/O。 My

Mysql細節補充,約束、索引

約束: 顯示建表語句:show create table 表名 查詢表中的約束:SELECT * FROM information_schema.`TABLE_CONSTRAINTS`  where table_name = '表名' 新增約束:alter table 表名 a

mysqlmysql索引探索(三)-- 高效能使用索引的策略

既然我們已經對索引的本質有所瞭解,那麼我們就應該來討論如何高效能的使用引擎。 1. 列的離散性越高,選擇性越好。 列的離散性是這樣定義的:count(discount col):count(col),也就是不同的列數比列的總數。這個數值越大說明列的離散型就越好。 如果用

MySQLmysql面試相關問題(正規化,事物,檢視,索引

三大正規化: 1、單個欄位不能繼續拆分,(個人理解:列具有原子性) 2、在第一正規化的基礎上,每個表只描述一件事情。可以理解為第二正規化就是要有主鍵,要求其他欄位都依賴於主鍵。 為什麼要有主鍵——沒有主鍵就沒有唯一性,沒有唯一性在集合中就定位不到這行記錄,所以要有主鍵。 其他欄位為什

mysql哪些情況下mysql索引會失效?

如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼儘量少用or的原因)      注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引   2.對於多列索引,不是使用的第一部分,則不會使用索引   3.like查詢是以%開頭   4.如果列型別是字串,那一定要在條件

MySQL效能優化之 覆蓋索引

mysql中的一種十分高效有用的索引---覆蓋索引。 覆蓋索引用通俗的話講就是在select的時候只用去讀取索引而取得資料,無需進行二次select相關表。這樣的索引的葉子節點上面也包含了他們索引的資料。 select * from table_name; select id,name from table_

MySQL使用不到索引的情況

MySQL使用不到索引的情況有很多,今天具體操作了一番,總結了些常見的情況 建立以下表,有四個欄位,其中name和password做了關聯索引,id為主鍵索引 mysql> show create table users \G *******************

MySQLMySQL儲存引擎以及索引

一、儲存引擎 MySQL中的資料用各種不同的技術儲存在檔案中,這些技術中的每一種技術都使用不同的儲存機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。這些不同的技術以及配套的相關功能在 MySQL中被稱作儲存引擎(也稱作表型別)。 我的理解是,資料

MySQL資料型別&時間戳&主鍵&外來鍵&索引

一、資料表的建立 示例: 二、MySQL資料型別 1. 整數型別:BIT、BOOL、TINYINT、SMALLINT、MEDIUMINT、 INT、 BIGINT MySQL資料型別

宇哥帶你玩轉MySQL索引篇(一)索引揭祕,看他是如何讓你的查詢效能指數提升的

  場景復現,一個索引提高600倍查詢速度? 首先準備一張books表 create table books( id int not null primary key auto_increment, name varchar(255) not null, author va

Mysql常用命令

flush mysq tmp pri nec 清除 int 用戶 創建 登錄mysql -uroot -p 查看有哪些數據庫show databases; 創建一個普通用戶 sa ,密碼是 some_passCREATE USER [email protecte

mysqlservice mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤

開機 init.d starting 設置 tin 執行 rest root lan service MySQL start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤的方法如下: [[email protected]/

Mysql經常使用指令之——忘記password

my.cnf 執行cmd mysql blank lan service 重裝 授權 環境變量 上一篇文章基本總結了下myql下通過指令怎麽創建用戶。詳見:【Mysql】經常使用指令之——用戶操作(創建,授權,改動。刪除) 今天說下特殊情況,忘記passw

mysql一個很小但很影響速度的地方

統一 速度 values self. class .exe 註意 logs 差距 如果要插入一大批數據,千萬不要一條一條的execute, commit。而應該是先全部execute,最後統一commit!!! 千萬註意,時間差距還是很大的!! 正確示範:快 fo

MySQL配置MySQL安裝和遠程訪問步驟

image 新建 oar 最新 rest word clas 字段 sql安裝 以遠程服務器為例,安裝Mysql到Linux並配置遠程訪問,步驟如下: 1.下載安裝最新的rpm文件 方法一: rpm -Uvh http://repo.mysql.com/mysql-co

MySQLLinux創建MySQL的角色信息

user 工具 選擇 好的 rest upd 配置 roo cnblogs 1.進入數據庫 mysql -u root -p 輸入密碼 2.進入之後輸入: use mysql; 3.直接從連接客戶端的工具,選擇數據庫mysql->user表裏面復制