數(shù)據(jù)庫-day05

課程安排

基礎(chǔ)
1.介紹安裝
2.體系結(jié)構(gòu)管理
3.SQL基礎(chǔ)及元數(shù)據(jù)獲取
4.SQL基礎(chǔ)優(yōu)化-索引及執(zhí)行計劃
核心技術(shù)
1.存儲引擎
2.日志管理
3.備份恢復(fù)
4.主從復(fù)制
高級-架構(gòu)篇
1.高可用及讀寫分離
2.分布式數(shù)據(jù)庫架構(gòu)
3.MySQL全面優(yōu)化

SQL基礎(chǔ)優(yōu)化-索引及執(zhí)行計劃*****

1.什么是索引?

相當于一本書的目錄惧笛,用來加速查詢

2.索引算法的演變
 1.演變:  二叉樹-->紅黑樹-->btree-->B+TREE(B*TREE)
 2.目的是快速的確認范圍
 3.mysql支持的索引 類型
    B+TREE*****HASH  RTREE  FULLTEXT  GIS索引
 4.BTREE查找算法介紹
 5區(qū)別:leaf節(jié)點和no-leaf節(jié)點因妇,有相鄰的指針
圖片.png

MySQL中的BTREE如何構(gòu)建****

聚簇索引(聚集索引叉寂,集聚索引)
1.自動選擇主鍵列(PK)狼犯,沒有主鍵會自動選擇UK外里,如果都沒有自動生成隱藏列
innodb 才有聚簇索引
功能:
    1.數(shù)據(jù)存儲時疏虫,按照聚簇索引列順序在磁盤上有序的存儲在連續(xù)數(shù)據(jù)頁上(16K) ---->索引組織表(IOT)
如何構(gòu)建:
    1.將有序的整表數(shù)據(jù)行所在數(shù)據(jù)頁永罚,作為葉子節(jié)點
    2.按照聚簇索引列值,向上生成枝節(jié)點和跟節(jié)點
查詢:
    按照聚簇索引列作為查詢條件時卧秘,等值查詢呢袱,發(fā)生3次IO即可獲得數(shù)據(jù)行
    如果是范圍查詢,利用葉子節(jié)點雙向指針繼續(xù)優(yōu)化查詢
輔助索引:alter table t1 add index idx(name)
構(gòu)建:
  1.提取name列值+ID列值翅敌,按照name列值的升序排序
  2.將排好序的數(shù)據(jù)羞福,均勻的,有序的存儲到新的葉子節(jié)點中
  3.通過name的值向上生成枝節(jié)點和跟節(jié)點
查詢:
    1.按照name作為查詢條件時蚯涮,遍歷輔助引樹治专,得到PK
    2.拿著PK的值進行回表查詢
總結(jié)
1卖陵,減少查詢次數(shù)
2.減少IO的次數(shù)
3.等值,縮小范圍
4.盡量使用聚簇索引查詢
5.減少回表次數(shù)
6.聯(lián)合索引使用:減少ID的個數(shù)
7.覆蓋索引使用:輔助索引中有所有要查詢的值

索引管理

1.索引的查詢
desc city;
show index from city

f輔助索引的細分

創(chuàng)建索引
唯一索引
alter table xxx add 
索引樹的高度张峰?
1.行數(shù)多
    拆分表:歸檔表泪蔫,分區(qū)表,分布式數(shù)據(jù)庫
2.索引列值過長
    前綴索引挟炬,
3.數(shù)據(jù)類型影響
    01.簡短數(shù)據(jù)類型替代長繁瑣數(shù)據(jù)類型
    02.變成最好是varchar()類型鸥滨,
    03.靈活使用enum()
聯(lián)合索引
mysql> alter table city add index idx_na_co(name,countrycode);
查看創(chuàng)建的聯(lián)合索引
show index from city;
(a,b谤祖,c)
1.構(gòu)建時婿滓,取出id+a+b+c,依次a-->b-->c的順序粥喜,進行數(shù)據(jù)行的排序
2.枝節(jié)點和根節(jié)點凸主,只會保存最左列的索引值
聯(lián)合索引查詢時,遵循最左原則额湘,最左列盡量使用重復(fù)值少的列卿吐。
把控一個原則:建立了聯(lián)合索引,盡量應(yīng)用完整
如何確認一個查詢锋华,對于聯(lián)合索引應(yīng)用長度嗡官?
多字句:
where a and b group by c   

執(zhí)行計劃獲取及分析

在SQL執(zhí)行之前,將優(yōu)化器選擇后的執(zhí)行計劃獲取出來進行分析

1.命令使用方法 (desc)
mysql> mysql> desc select * from city where countrycode='CHN';
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | city  | NULL       | ref  | CountryCode   | CountryCode | 3       | const |  363 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
table:針對多表時比較有意義毯焕,確認那張表出了問題
type:查詢類型*****
全表掃描:all
索引掃描:index衍腥,range,fef纳猫,eq_ref,const(system)
獲取不到數(shù)據(jù):NULL 
possible_keys:可能會用到的索引婆咸。CBO(代價),RBO(規(guī)則)
key*****
真正用到的索引 
key_len*****
索引覆蓋長度芜辕,主要是用來確認聯(lián)合索引覆蓋長度
rows
查詢結(jié)果集行數(shù)
Extra
額外信息
重要信息詳解
1.type詳解
  ALL:全表掃描
  原因:
  查詢條件沒有索引
  where group by order by select后的列
  查詢條件不滿足索引應(yīng)用規(guī)則
  查詢條件是不確認值時尚骄,不走索引、
    mysql> desc select * from city where countrycode !='CHN';
    desc select * from city where countrycode like '%CHN%';
其他原因
  indx:全索引掃描
    desc select countrycode from city;
range:索引范圍掃描
  >< >= <= like between and
  in or
    desc select * from city where id<100;
    desc select * from city where countrycode like 'CH%';
  desc
  select * from city where countrycode='CHN'
  union all
  select * from city where countrycode='USA';
ref :輔助索引等值查詢
    desc select * from city where countrycode='CHN';
eq_ref:多表連接時侵续,右表中的on的連接條件是主鍵或唯一鍵
    mysql> desc select city.name,country.name from city join country on city.countrycode=country.code where city.population<100;
const(system):聚簇索引或者唯一索引的等值查詢
    desc select * from city where id=10;
NULL 沒有獲取到數(shù)據(jù)
    desc select * from city where id=10;
key_len 計算規(guī)則
反應(yīng)的是,在聯(lián)合索引應(yīng)用長度
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倔丈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子状蜗,更是在濱河造成了極大的恐慌乃沙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗舰,死亡現(xiàn)場離奇詭異警儒,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門蜀铲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來边琉,“玉大人,你說我怎么就攤上這事记劝”湟蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵厌丑,是天一觀的道長定欧。 經(jīng)常有香客問我,道長怒竿,這世上最難降的妖魔是什么砍鸠? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮耕驰,結(jié)果婚禮上爷辱,老公的妹妹穿的比我還像新娘。我一直安慰自己朦肘,他們只是感情好饭弓,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著媒抠,像睡著了一般弟断。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趴生,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天阀趴,我揣著相機與錄音,去河邊找鬼冲秽。 笑死,一個胖子當著我的面吹牛矩父,可吹牛的內(nèi)容都是我干的锉桑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼窍株,長吁一口氣:“原來是場噩夢啊……” “哼民轴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起球订,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤后裸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冒滩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體微驶,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了因苹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苟耻。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扶檐,靈堂內(nèi)的尸體忽然破棺而出凶杖,到底是詐尸還是另有隱情,我是刑警寧澤款筑,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布智蝠,位于F島的核電站,受9級特大地震影響奈梳,放射性物質(zhì)發(fā)生泄漏杈湾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一颈嚼、第九天 我趴在偏房一處隱蔽的房頂上張望毛秘。 院中可真熱鬧,春花似錦阻课、人聲如沸叫挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抹恳。三九已至,卻和暖如春署驻,著一層夾襖步出監(jiān)牢的瞬間奋献,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工旺上, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓶蚂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓宣吱,卻偏偏與公主長得像窃这,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子征候,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容