MySQL的索引分段 MySQL索引詳解

2021-10-18 18:48:18 字數 2356 閱讀 8405

⼀ 、初識索引

為什麼要有索引?

⼀般的應⽤系統,讀寫比例在10:1左右,⽽且插入操作和⼀般的更新操作很少出現效能問題,在⽣產環境中, 我們遇到最多的,也是最容易出問題的,還是⼀些複雜的查詢操作,因此對查詢語句的優化顯然是重中之重。 說起加速查詢,就不得不提到索引了。

什麼是索引?

索引在mysql中也叫是⼀種「鍵」,是儲存引擎⽤於快速找到記錄的⼀種資料結構。索引對於良好的效能 非常關 鍵,尤其是當表中的資料量越來越⼤時,索引對於效能的影響愈發重要。 索引優化應該是對查詢效能優化最有

效的⼿段了。索引能夠輕易將查詢效能提⾼好⼏個數量級。 索引相當於字典的⾳序表,如果要查某個字,如果 不使⽤⾳序表,則需要從⼏百⻚中逐⻚去查。

⼆、索引的原理

索引的⽬的在於提⾼查詢效率,與我們查閱圖書所⽤的⽬錄是⼀個道理:先定位到章,然後定位到該章下的⼀個⼩節,然後找到⻚數。相似的例⼦還有:查字典,查火⻋⻋次,⻜機航班等本質都是:通過不斷地

縮⼩想要獲取資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是說,有了這種索引機制,我們可以總是⽤同⼀種查詢⽅式來鎖定資料。資料庫也是⼀樣,但顯然要複雜的多,因為

不僅⾯臨著等值查詢,還有範圍查詢(>、

呢?最簡單的如果1000條資料,1到100分成第⼀段,101到200分成第⼆段,201到300分成第三段......這樣查第250條資料,只要找第三段就可以了,⼀下⼦去除了90%的⽆效資料。但如果是1千萬的記錄呢,

分成⼏段比較好?稍有演算法基礎的同學會想到搜尋樹,其平均複雜度是lgn,具有不錯的查詢效能。但這⾥我們忽略了⼀個關鍵的問題,複雜度模型是基於每次相同的操作成本來考慮的。⽽資料庫實現比較複雜,

⼀⽅⾯資料是儲存在磁碟上的,另外⼀⽅⾯為了提⾼效能,每次⼜可以把部分資料讀入記憶體來計算,因為我們知道訪問磁碟的成本⼤概是訪問記憶體的⼗萬倍左右,所以簡單的搜尋樹難以滿⾜複雜的應⽤場景。

三、索引管理

⼀ 功能

#1. 索引的功能就是加速查詢

#2. mysql中的primary key,unique,聯合唯⼀也都是索引,這些索引除了加速查詢以外,還有約束的功能

⼆ mysql常⽤的索引

普通索引

index:加速查詢

唯⼀索引:

-主鍵索引primary key:加速查詢+約束(不為空、不能重複)

-唯⼀索引unique:加速查詢+約束(不能重複)

聯合索引:

-primary key(id,name):聯合主鍵索引

-unique(id,name):聯合唯⼀索引

-index(id,name):聯合普通索引

三 索引的兩⼤型別hash與btree

舉個例⼦來說,比如你在為某商場做⼀個會員卡的系統。

這個系統有⼀個會員表

有下列字段:

會員編號 int

會員姓名 varchar(10)

會員⾝份證號碼 varchar(18)

會員** varchar(10)

會員住址 varchar(50)

會員備註資訊 text

那麼這個 會員編號,作為主鍵,使⽤ primary

會員姓名 如果要建索引的話,那麼就是普通的 index

會員⾝份證號碼 如果要建索引的話,那麼可以選擇 unique (唯⼀的,不允許重複)

#除此之外還有全文索引,即fulltext

會員備註資訊 , 如果需要建索引的話,可以選擇全文搜尋。

⽤於搜尋很⻓⼀篇文章的時候,效果最好。

⽤在比較短的文字,如果就⼀兩⾏字的,普通的 index 也可以。

但其實對於全文搜尋,我們並不會使⽤mysql⾃帶的該索引,⽽是會選擇第三⽅軟體如sphinx,專⻔來做全文搜尋。

#其他的如空間索引spatial,了解即可,⼏乎不⽤

四 建立/刪除索引的語法

#⽅法⼀:建立表時

create table 表名 (

欄位名1 資料型別 [完整性約束條件…],

欄位名2 資料型別 [完整性約束條件…],

[unique | fulltext | spatial ] index | key

[索引名] (欄位名[(⻓度)] [asc |desc])

#⽅法⼆:create在已存在的表上建立索引

create [unique | fulltext | spatial ] index 索引名

on 表名 (欄位名[(⻓度)] [asc |desc]) ;

#⽅法三:alter table在已存在的表上建立索引

alter table 表名 add [unique | fulltext | spatial ] index

索引名 (欄位名[(⻓度)] [asc |desc]) ;

#刪除索引:drop index 索引名 on 表名字;

mysql預設索引 mysql的索引

什麼是索引 當你在字典中查詢你的名字的時候,你有兩種方式。第 一 一頁一頁的翻,第 二 通過拼音 筆畫,等查詢。那麼第二種方式就是通過索引的方式查詢。那麼在myslq中資料庫也是這麼幹的。索引可以增加查詢速度,但是同時mysql維護索引也需要耗費效能。索引的分類 主鍵索引 如果乙個字段為主鍵 pri...

mysql索引要素 mysql索引和索引的原理

首先為什麼要加索引?資料庫伺服器有兩種儲存介質,我們需要把索引放到硬碟上,在硬碟上進行查詢時會產生i o 操作 我們通過索引來查詢某 資料的時候,需要計算產 的磁碟 i o 次數,當磁碟 i o 次數越多,所消耗的時間也就越 如果我們能讓索引的資料結構儘量減少硬碟的 i o操作,所消耗的時間也就越 ...

mysql 索引 手冊 MySQL 索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...