從淺入深看透 索引

2021-10-03 12:04:07 字數 1748 閱讀 4022

簡單來說,比如你想在圖書館借一本莫言的**,一樓存的數學類,二樓醫學類,三樓文學類。在三樓一排存的徐志摩的,二排存的莫言的,三排存的林徽因的。索引就相當於引導,有人告訴你三樓二排存的莫言的,你就不用從一樓一本一本的去往上找,這就大大增加了查詢速度。

來官方一點:索引能快速找出在某一列中有一特定值的行。不使用索引,mysql必須從第一條記錄開始查詢,直到找到相關的行。如果表中查詢的列有乙個索引,mysql能快速到達某個位置去搜尋資料檔案,而不必檢視所有資料。索引是對資料庫中一列或多列的值進行排序的一種結構。

advantage:

1.大大加快資料的檢索速度;

2.建立唯一性索引,保證資料庫表中每一行資料的唯一性;

3.加速表和表之間的連線;

4.在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間

disadvantage

1.索引需要佔物理空間。

2.當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度。

唯一索引:不允許其中任何兩行具有相同索引值的索引

當現有資料中存在重複的鍵值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止新增將在表中建立重複鍵值的新資料。例如,如果在employee表中職員的姓(lname)上建立了唯一索引,則任何兩個員工都不能同姓。

主鍵索引:

在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對資料的快速訪問。

聚簇索引

在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引, 即如果存在聚集索引,就不能再指定clustered 關鍵字。乙個表中只能有乙個聚集索引,但表中的每一列都可以有自己的非聚集索引。

非聚集索引:則表中行的物理順序與鍵值的邏輯(索引)順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。聚集索引更適用於對很少對基表進行增刪改操作的情況。

在哪兒建立?索引的建立是在資料庫的某些列上面,

1、在經常需要搜尋的列上,可以加快搜尋速度,

2、在作為主鍵的列上,強制該列的唯一性,

3、在經常用作連線的列上,可以加快連線的速度

4、在經常需要排序的列上,利用索引的排序,加快排序時間,

5、在經常使用where子句中的列上,可以加快條件的判斷速度

怎樣建立和刪除?

1使用create index語句在已存在的表上建立和刪除索引

// 建立索引

create index index_name on table_name

(column_name)

;// 刪除索引

drop index index_name on table_name;

(內部被對映成alter table語句)

```2使用alter table 語句建立和刪除索引

//建立索引

alter table table_name add index

(column_name)

;// 刪除索引

alter table table_name drop index index_name;

b樹和b+樹(注釋待續)

淺入深出Vue 前言

之前大部分是在做後端,後來出於某些原因開始接觸vue。深感前端變化之大,各種工具 框架令人眼花繚亂。不過正是這些變化,讓前端開發更靈活。博主在剛開始時,參考官網的各個步驟以及網上的部落格。搭個環境,跑起來demo都費了大半天的勁。本系列文章將由始至終圍繞乙個簡易的個人部落格專案展開,在闡述的同時利用...

容器淺入深出之LinkedList

list介面下的主要兩個實現類,arraylist已經討論過了。這次再看看linkedlist的底層實現 linkedlist所實現的介面和繼承的父類和arraylist差不多,但是它多實現了乙個deque介面 linkedlist是基於鍊錶實現的,其中每個元素其實是每個節點內部的element,l...

一入python深似海 淺拷貝與深拷貝

python中有乙個模組copy,deepcopy函式用於深拷貝,copy函式用於淺拷貝。要理解淺拷貝,必須先弄清楚python中的引用。python中一切都是物件,變數中存放的是物件的引用。這是乙個普遍的法則。能夠說 python 沒有賦值,僅僅有引用。如。a 1,變數a僅僅是整數物件1的引用。一...