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存放高階管理員才能使用的命令 作業系統的各...