鍍金池/ 問答/數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ 《高性能mysql》中某一節(jié)看不懂的部分希望大家能夠給點意見

《高性能mysql》中某一節(jié)看不懂的部分希望大家能夠給點意見

個人理解能力有限, 這本書看的總是感覺很多話理解不了

圖中, 大部分時間花在數(shù)據(jù)拷貝上 什么意思啊? 然后什么緩存負(fù)載非常重要? 什么??? 蒙了!

我看了半天認(rèn)為 在查詢字段有主鍵的時候, 二級索引可以做到覆蓋到主鍵, 但圖中第二句還是看不懂在說什么, 怎么就二次查詢了??
clipboard.png

這句話感覺就是從天而降的一句話, 完全看不懂, 什么條件就為假了 看的暈乎?
clipboard.png

回答
編輯回答
我不懂

舉個用戶表的栗子:

id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT
username CHAR(15) NOT NULL
password CHAR(15) NOT NULL
UNIQUE (username)

現(xiàn)在主鍵是id,索引是username,對于InnoDB來說實際上有兩個索引:

id -> (username, password) // 以下稱為PK
username -> id             // 以下稱為UK

如果你這么查:SELECT id FROM user WHERE username = ...,那么MySQL只會查UK,而不會去查PK;
如果你這么查:SELECT id, password FROM user WHERE username = ...,那么MySQL會查一次UK,得到id后再查一次PK。

如果你要優(yōu)化第二句,可以多加一個索引:


KEY (username, password)

這樣就有:

(username, password) -> id // IDX

如果你再這么查:SELECT id, password FROM user WHERE username = ...,MySQL就只需要查IDX,而不用再查PK和UK了。

2017年5月25日 08:51
編輯回答
吃藕丑

覆蓋索引這塊兒,樓主就按照@auntyellow的答案理解就行了,
理解到這個程度,如果你不是立志于成為DBA,說實話足夠了。
這本書寫得不錯,但是我覺得不太適合數(shù)據(jù)庫新手來看,因為里面有些語句晦澀難懂,如果對概念再不熟悉,容易被引入歧途,
我建議你看這本《MongoDB權(quán)威指南》,雖然這本講解MongoDB,但是數(shù)據(jù)庫都是想通的,比如這個“覆蓋索引”還有你上午問的“列的選擇性”,在這本書上都有詳細(xì)并且易于理解的描述,看完這本你再來看高性能會好一些。

2017年7月23日 08:39
編輯回答
痞性

這本書很多人都說好 但是看著說起來怎么這么難理解

2018年5月14日 18:12