日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql高级笔记_MySQL高级部分笔记

發(fā)布時間:2024/10/12 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql高级笔记_MySQL高级部分笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

有關(guān)于MySQL的高級部分筆記

這是一篇關(guān)于MySQL高級部分的筆記主要是,sql優(yōu)化以及mysql鎖的相關(guān)內(nèi)容,以及主從配置等內(nèi)容等比較基礎(chǔ)的優(yōu)化

一、邏輯架構(gòu)部分

邏輯架構(gòu)

邏輯架構(gòu)介紹圖如下

連接層:最上層是一些客戶端和連接服務(wù),包含本地的sock通訊大多時基于客戶端/服務(wù)端工具實現(xiàn)的類似于tcp/ip的通訊

服務(wù)層:完成大多數(shù)的核心服務(wù)的功能,如,SQL接口,并完成緩存的查詢SQL的分析和優(yōu)化以及部分內(nèi)置函數(shù)的執(zhí)行,所有款存儲引擎的功能

引擎層:存儲引擎真正的負(fù)責(zé)了MySQL中的數(shù)據(jù)的存儲和提取,服務(wù)器通過api與存儲引擎進(jìn)行通訊,常用的有MyISAM和InnoDB

存儲層:數(shù)據(jù)存儲在裸設(shè)備上,并完成與存儲引擎的交互

優(yōu)化主要是只使SQL的解析格式符合優(yōu)化器的優(yōu)化格式

存儲引擎

查看mysql的存儲引擎命令

# 看你的mysql提供了生么存儲引擎

show engines;

# 看當(dāng)前默認(rèn)的存儲引擎

show variables like ‘%storage_engine%‘;

MyISAM與InnoDB的對比如下表

對比項MyISAMInnoDB

主外鍵

不支持

支持

事務(wù)

不支持

支持

行表鎖

表鎖,即使操作一條記錄也會鎖住整個表,不適合高并發(fā)的操作

行鎖,操作時只鎖某一行,不對其他的行有影響,適合高并發(fā)的操作

緩存

只緩存索引不緩存真實數(shù)據(jù)

不僅緩存索引還要緩存真實數(shù)據(jù),對內(nèi)存的要求比較高,而且內(nèi)存的大小對性能有決定性的影響

表空間

關(guān)注點

性能

事務(wù)

默認(rèn)安裝

Y

Y

性能下降SQL慢的原因

查詢語句寫的爛

索引失效

單值索引

符合索引

關(guān)聯(lián)查詢太多join(設(shè)計缺陷)

服務(wù)器調(diào)優(yōu)及各個參數(shù)的設(shè)置(緩沖、線程數(shù)等)

SQL執(zhí)行加載的順序

手寫順序

select distinct

from

join on

where

group by

having

order by

limit

MySQL的執(zhí)行

from

on

join

where

group by

having

select

distinct

order by

limit

?

總結(jié)

二、索引及優(yōu)化部分

索引簡介

是什么

索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是數(shù)據(jù)結(jié)構(gòu)(查找+排序)

種類

B+樹索引

hash索引

全文索引

RTree索引

優(yōu)勢

提高數(shù)據(jù)的檢索效率降低的磁盤的io

降低數(shù)據(jù)的排序成本降低了cpu的消耗

劣勢

實際上索引也是一張表,保存主鍵與索引字段,指向?qū)嶓w表的記錄,也是要占用空間的

會降低對于insert,update,delete的速度

索引只是提高效率的一個因素

分類

單值索引:一個索引只包含一個列

唯一索引:索引的列必須唯一,可以有空值

復(fù)合索引:一個索引包含多個列

基本語法

# 創(chuàng)建

create [unique] index indexName on table(columnname(length));

alter tablename add [unique] index indexname on (columnname(length));

# 刪除

drop index [indexname] on tablename;

# 查看

show index from tablename\G

哪些情況適合建索引

主鍵自動建立唯一索引

頻繁作為查詢條件的字段

查詢中與其他表關(guān)聯(lián)的字段,外鍵關(guān)系建立索引

頻繁更新的字段不適合建立索引

where用不到的字段不創(chuàng)建索引

單鍵/組合索引的選擇問題(高并發(fā)下傾向于創(chuàng)建復(fù)合索引)

查詢中排序的字段排序字段通過索引訪問將大大提高訪問的速度

查詢中統(tǒng)計和分組的字段

哪些情況不適合建索引

表記錄太少

頻繁修改的字段

數(shù)據(jù)重復(fù)且分布平均的字段

性能分析

MySQL Query Optimizer 查詢優(yōu)化器

負(fù)責(zé)對select語句進(jìn)行優(yōu)化

性能瓶頸

cpu:cpu飽和的時候一般發(fā)生在數(shù)據(jù)裝入內(nèi)存或者從磁盤上讀取數(shù)據(jù)的時候

io:裝入數(shù)據(jù)元大于內(nèi)存容量的時候

服務(wù)器硬件:top,free,iostat,vmstat命令查看系統(tǒng)的性能狀態(tài)

三、Explain 執(zhí)行計劃

是什么

使用explain關(guān)鍵字可以模擬優(yōu)化器執(zhí)行sql查詢語句,從而知道,MySQL是如何處理你的sql語句的分析你的查詢語句或是表結(jié)構(gòu)的性能瓶頸

怎么用

explain + sql

執(zhí)行計劃包含的信息

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra

字段解釋

id

id:select查詢的序列號,包含一組數(shù)字表示查詢中執(zhí)行select子句或操作表的順序

三種情況:id相同執(zhí)行順序由上至下

id不同如果是子查詢,id的序號會遞增,id越大優(yōu)先級越高,越先被執(zhí)行

id相同又不同會遵循上兩條規(guī)律

select_type

select_type: 查詢的類型主要是用于區(qū)別,普通查詢,聯(lián)合查詢,子查詢等復(fù)雜查詢

simple:簡單查詢不包含子查詢,或者union

primary:主查詢子查詢最外層的查詢

subquery:子查詢

derived:在from列表中包含的子查詢被標(biāo)記為dervied衍生,MySQL會遞歸執(zhí)行這些子查詢,把最終結(jié)果放在臨時表里

union:第二個select出現(xiàn)在union之后則被標(biāo)記為union,若union包含在from子句中,外層的select將被標(biāo)記為derived

union result:從union表中獲取結(jié)果的select

table顯示這一行數(shù)據(jù)是關(guān)于那一張表的

type

常見的訪問類型八種

allindexrangerefeq_refconst,systemnull

全表掃描

全索引掃描比all好

檢索指定范圍的行

非唯一性索引掃描,多條記錄匹配

唯一性索引掃描,表中只有一條記錄匹配常見于主鍵索引唯一索引

system表只有一行記錄const表示通過索引一次就找到了以為只匹配一行數(shù)據(jù)如將主鍵置于where列表中,MySQL就能將查詢轉(zhuǎn)化為const

最好到最差

system > const > eq_ref > ref > range > index > all

一般來說得保證查詢至少優(yōu)化到range最好到ref

prossiable_keys和key

prossiable_keys:顯示出在本次查詢中可能用到的索引,但是不一定用

keys:實際查詢的過程中實際使用的索引為null沒有使用索引,若查詢中使用覆蓋索引則在該索引僅出現(xiàn)在key列表中

key_len

索引字段的最大可能長度,并非實際長度,再不損失精確性的情況下越小越好

ref

顯示索引的那一列被使用了,如果可能的話盡量是個常數(shù)

rows

找到所需的記錄讀取的行數(shù)

extra

很重要的額外信息

using filesort:使用文件內(nèi)排序(壞)

using temporary:使用臨時文件(壞)

using index:使用索引(好)

using where:使用where

四、優(yōu)化的幾點建議

全值匹配

最佳左前綴法則

不在索引列上做任何的操作(計算,函數(shù),(自動or手動的類型轉(zhuǎn)換)),會導(dǎo)致索引失效而全表掃描

存儲引擎不能使用索引中范圍條件右邊的列

盡量使用覆蓋索引只訪問索引的查詢(索引列與查詢列一致),減少select *

mysql在使用不等于(!= 或 <>)的時候無法使用索引回單之全表掃描

is null ,is not null 也無法使用索引

like以通配符開頭會導(dǎo)致索引失效全表掃描

字符串不單引號索引失效

少用or用來連接時會使索引失效

永遠(yuǎn)小表驅(qū)動大表

group by/order by排序字段也會用到索引(左前綴,盡量使用where)

五、查詢截取分析

慢查詢?nèi)罩窘厝÷齭ql

# 查看

show variables like ‘%slow_query_log%‘;

# 開啟

set global slow_query_log=1

# 查看記錄sql的閾值時間

show variables like ‘long_query_time%‘;

# 設(shè)置閾值時間

set global long_query_time=3;

show profile

# 查看是否支持

show variables like ‘profiling‘

# 開啟

set profiling=on

?

# 查看結(jié)果

show profiles;

show profile cpu,block io from query [問題sql的query_id];

六、MySQL鎖

原文:https://www.cnblogs.com/yangenyu/p/11604262.html

總結(jié)

以上是生活随笔為你收集整理的mysql高级笔记_MySQL高级部分笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。