MySQL索引小白必備入門篇

2021-10-08 13:46:01 字數 3561 閱讀 2944

2.幾個常見的索引名詞:

聚簇索引:innodb,資料檔案和索引檔案放在同一檔案中,因此要指定乙個key值(此處key值不是主鍵,而是索引);關於key值翻譯過來是主鍵的爭議:其實key值翻譯成主鍵是不太對的,因為我們建表時不一定有主鍵,這時innodb會從其他列中選擇乙個唯一鍵來建立聚簇索引,如果連唯一鍵也沒有,就會選擇6位元組的rowid(使用者不可見)來建立聚簇索引資料要跟某個索引關聯在一起才能查詢

非聚簇索引:myisam,資料檔案和索引檔案不放在同一檔案中

主鍵索引:建表時設定主鍵

唯一索引:建表時設定唯一鍵

mysql預設建立主鍵索引和唯一索引:

create table  test

(id int primary key,name varchar(10

) unique)

;

普通索引(輔助):回表:通過普通索引去樹中查詢返回主鍵值,根據主鍵去索引樹查詢資料,建立普通索引,mysql會再為這個索引建立一顆b+樹,葉節點包含的不再是資料,而是對應的。

例子:建表時:id(primary key),name(普通),age,***,address

使用:select id,age from test where name='zhangsan';

覆蓋索引

例子:

id

(primary key)

,name

(普通)

,age,***,address

select id,age from test where name=

'zhangsan'

;select id,name from test where name=

'zhangsan'

;

組合索引:最左匹配:條件中至少包含索引中最左邊字段

例子:name,age(組合索引)

select * from test where name=?and age=?;

select * from test where name=?;

select * from test where age=?;

select * from test where age=

?and name=

?;

(這個雖然順序調了,但在mysql的組織架構中的server層的優化器會把age=? and name=?順序調換回來)

除了3都符合

全文索引:本質和常用的模糊匹配使用 like + % 相同。

建索引語法:

select * from fulltext_test 

where match

(content,tag)

against

('*** ***'

);

例子:

建表:

create table test (

id int

, content text not null,

primary key

(id)

, fulltext key content_index

(content)

) engine=myisam default charset=utf8;

插資料:

insert into test (content) values (

'x'),(

'l'),(

'h')

;insert into test (content) values (

'xx'),

('ll'),

('hh');

insert into test (content) values (

'***'),

('lll'),

('hhh');

insert into test (content) values (

'***x'),

('llll'),

('hhhh'

);

測試:

select * from test where match

(content)

against

('x'

);

只有一條結果

只有執行select * from test where match(content) against('***x');才會搜到***x這一條,原因如下:在mysql 的全文索引中,有最小搜尋長度和最大搜尋長度兩個變數,對於長度小於最小搜尋長度和大於最大搜尋長度的詞語,都不會被索引。也就是說,只有這個詞語的長度在以上兩個變數的區間內,才能對乙個詞語使用全文索引搜尋

首先要明確mysql資料表中一定會有索引(上面圖中有解釋),回表指的是通過我們自定義建立的二級索引(輔助索引)得到最初建立的索引(可能是主鍵,唯一字段或者rowid),再根據這個索引去拿到對應記錄,例如:

select * from test where name=ma;,先去我們為name欄位建立索引得到的b+樹得到對應主鍵,再根據主鍵得到對應的記錄。

注意:例子中select id from test where name=ma;只需查詢一顆b+樹。

資料儲存磁碟

mysql有自己的服務

mysql服務要跟磁碟發生互動.

例子:

引入:select tl.name,t2.name from tl join t2 on t1.id=t2.id

1.先做表連線,然後查詢需要的字段

2.先把需要的所有欄位都拿出來,然後在做關聯-謂詞下推

索引下推唯一的缺點是需要在磁碟上多做資料篩選,原來的篩選是放在記憶體中的,現在放到了磁碟查詢資料的環節,這樣做看起來成本比較高(匹配乙個再匹配乙個),但是別忘了,資料的排序的,所有的資料是聚集存放所以效能不會有影響,而且整體的io量會大大減少,反而會提公升效能。

AngularJs之新手小白入門篇

首先,angularjs是乙個基於mvc處理模式,實現了mvvm資料雙向繫結 的用於開發動態web專案的框架。這是乙個簡單angularjs的應用 scope.nihao 你好 1.要應用angularjs框架,首先我們需要做的是引入angularjs的js檔案 4.最後一步,也是必不可少的一步,在...

linux小白入門篇之三

我只管努力,其他的交給天意 程序的定義 程序就是cpu正在執行的程式 2.檢視程序 1 圖形介面檢視 gnome system monitor 2 程序檢視命令 ps a 所有程序 a 當前環境中執行的程序,不包含環境心資訊 u 顯示使用者資訊 a 在當前環境中執行的程序 x 列出系統中的所有執行包...

Linux小白入門篇(二) 系統目錄

前篇鏈結linux小白入門篇 一 系統安裝 linux系統中最大的目錄,所有的檔案和功能目錄都存放在 下 專門存放命令的目錄 這兩個目錄其實存放在usr資料夾下,目錄下只是快捷方式 sbin的s super bin存放普通所有使用者都能夠使用的命令 sbin存放高階管理員才能使用的命令 作業系統的各...