小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

搞定mysql優(yōu)化,十分鐘就夠了

 Bladexu的文庫 2018-01-17

緩存設(shè)置

有的被頻繁執(zhí)行的sql語句,比較消耗時(shí)間、消耗系統(tǒng)資源(沒的優(yōu)化可做)

并且每次獲得數(shù)據(jù)還不太發(fā)生變化

那么就把這個(gè)sql語句獲得信息給緩存起來,供后續(xù)執(zhí)行使用

這樣非常節(jié)省系統(tǒng)資源。

1. 具體使用

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

2. 緩存失效

數(shù)據(jù)表的數(shù)據(jù)有變化 或者 數(shù)據(jù)表結(jié)構(gòu)有變化,則緩存失效。

搞定mysql優(yōu)化,十分鐘就夠了

3. 什么情況不使用緩存

sql語句每次獲得數(shù)據(jù)有變化。

例如有 時(shí)間信息、隨機(jī)數(shù)等

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

4. 生成多個(gè)緩存

生成緩存的sql語句對'空格'、'大小寫'比較敏感

相同結(jié)果的sql語句,由于空格、大小寫問題就會(huì)分別生成緩存。

搞定mysql優(yōu)化,十分鐘就夠了

5. 不使用緩存

sql_no_cache 不進(jìn)行緩存

搞定mysql優(yōu)化,十分鐘就夠了

6. 查看緩存空間使用情況

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

分表設(shè)計(jì)

一個(gè)數(shù)據(jù)表里邊存儲的記錄信息太多了,記錄的條數(shù)達(dá)到1-2億條信息。

這是該數(shù)據(jù)表的活性就大大降低,數(shù)據(jù)表的運(yùn)行速度就比較慢、效率低下,影響mysql數(shù)據(jù)庫的整體性能。

現(xiàn)在設(shè)置一個(gè)水平分割,把許多的記錄信息分別存儲到不同的數(shù)據(jù)表里邊,這樣每個(gè)表存儲的記錄就比較少,該表的活性大大提高。

分表設(shè)計(jì)的兩種模式:

① 邏輯方式分表

mysql數(shù)據(jù)庫本身就有分表技術(shù),該方式的分表可以節(jié)省php的邏輯處理。

搞定mysql優(yōu)化,十分鐘就夠了

② 物理方式分表

自己手動(dòng)創(chuàng)建多個(gè)數(shù)據(jù)表出來

php程序需要考慮分表算法:數(shù)據(jù)往哪個(gè)表寫,從哪個(gè)表讀

搞定mysql優(yōu)化,十分鐘就夠了

1. 演示邏輯分表設(shè)計(jì)

mysql本身就支持的分表技術(shù)

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

以上邏輯分表設(shè)計(jì),在php程序里邊無需設(shè)置額外算法代碼,還像以往一樣直接對goods數(shù)據(jù)表進(jìn)行操作即可,mysql本身會(huì)考慮分表的算法。

2. 四種格式的邏輯分表

具體為:key hash ---->[求余方式]

range list ---->[范圍方式]

注意:分表字段必須是主鍵 或 主鍵的一部分

2.1 key分表

partition by key(條件字段id) partitions 10;

2.2 hash分表

根據(jù)表達(dá)式/字段方式進(jìn)行分表設(shè)計(jì)

partition by hash(表達(dá)式/字段) partitions 數(shù)量;

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

2.3 range分表

根據(jù) 字段/表達(dá)式 是否滿足某個(gè)范圍條件進(jìn)行分表設(shè)計(jì)

partition by range(year(pubdate))(

partition hou70 values less than (1980),

partition hou80 values less than (1990),

partition hou90 values less than (2000),

partition hou00 values less than (2010)

)

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

2.4 list分表

根據(jù) 表達(dá)式/字段 的內(nèi)容值是否在某個(gè)'列表'中進(jìn)行分表設(shè)計(jì)。

partition by list(month(pubdate))(

partition spring values in (3,4,5),

partition summer values in (6,7,8),

partition autumn values in (9,10,11),

partition winter values in (12,1,2)

)

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

3. 分表管理

具體就是對已經(jīng)存在的分表進(jìn)行增加、減少操作。

增加分表 不會(huì)引起數(shù)據(jù)丟失。

減少分表 在range/list領(lǐng)域會(huì)造成數(shù)據(jù)丟失

在key/hash領(lǐng)域不會(huì)造成數(shù)據(jù)丟失,

這兩個(gè)領(lǐng)會(huì)在進(jìn)行減少分表的同時(shí)就把全部數(shù)據(jù)重新整合到存在的表中,

key/hash兩種分表與業(yè)務(wù)邏輯關(guān)聯(lián)不緊密。

3.1 增加分表

求余方式: key/hash

> alter table 表名 add partitions 數(shù)量;

范圍方式: range/list

> alter table 表名 add partition(

partition 名稱 values less than (常量)

partition 名稱 in (n,n,n)

);

搞定mysql優(yōu)化,十分鐘就夠了

3.2 刪除分表

求余方式(key/hash):

>alter table 表名 coalesce partition 12;

刪除分表不會(huì)造成數(shù)據(jù)丟失,每次分表數(shù)據(jù)都重新整合到存在的分表里邊。

范圍方式(range/list):

>alter table 表名 drop partition 分區(qū)名稱;

刪除分表會(huì)造成數(shù)據(jù)丟失

① key/hash方式不會(huì)丟失數(shù)據(jù)

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

② range/list會(huì)丟失數(shù)據(jù)

給range分表寫4條記錄:

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

把'hou80'的分區(qū)刪除,從下圖查詢結(jié)果看對應(yīng)分表的數(shù)據(jù)也丟失了。

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

4. 物理分表設(shè)計(jì)

搞定mysql優(yōu)化,十分鐘就夠了

以上goods的物理分表需要增加php的算法邏輯:

需要計(jì)算記錄從哪個(gè)表讀、給哪個(gè)表寫。

4.1 php對物理分表的操作

搞定mysql優(yōu)化,十分鐘就夠了

5. 垂直分表

水平分表:是把一個(gè)表的全部記錄信息分別存儲到不同的分表之中。

垂直分表:是把一個(gè)表的全部字段分別存儲到不同的表里邊。

有的時(shí)候,一個(gè)數(shù)據(jù)表設(shè)計(jì)好了,里邊有許多字段,但是這些字段有的是經(jīng)常使用的,有的是不常用的。

例如,一個(gè)數(shù)據(jù)表有20個(gè)字段,其中10個(gè)字段是常用的,后10個(gè)字段是不常用的

那么在操作常用字段的時(shí)候,就不得不給其他不常用的字段也分配一定的資源進(jìn)行操作。

數(shù)據(jù)表:

會(huì)員表: user_id 登錄名 密碼 郵箱 手機(jī)號碼 身高 體重 性別 家庭地址 身份證號碼

以上表,紅色是常用的,藍(lán)色的是不常用的

為了使得常用字段運(yùn)行速度更快、效率更高,把常用字段給跳出來,因此數(shù)據(jù)表做以下設(shè)計(jì):

會(huì)員表(主)字段:user_id 登錄名 密碼 郵箱 手機(jī)號碼

會(huì)員表(輔)字段:user_id 身高 體重 性別 家庭地址 身份證號碼

以上把會(huì)員表根據(jù)字段是否常用給分為兩個(gè)表的過程就是垂直分表。

架構(gòu)設(shè)計(jì)

架構(gòu)設(shè)計(jì)也稱為集群設(shè)計(jì):由多臺mysql服務(wù)器共同支撐網(wǎng)站的運(yùn)行,每臺服務(wù)器分擔(dān)的工作就比較少,運(yùn)行速度快、效率高。

mysql數(shù)據(jù)庫在運(yùn)行的時(shí)候一般查詢/寫入的sql語句比例為:7/1

并且查詢消耗的資源比寫入要更多。

因此可以設(shè)計(jì)一個(gè)'主從模式'的集群,與之前redis的主從模式使用模式一直。

維護(hù)備份的集群架構(gòu):

搞定mysql優(yōu)化,十分鐘就夠了

主從模式的集群架構(gòu):

搞定mysql優(yōu)化,十分鐘就夠了

慢查詢?nèi)罩臼占?/strong>

我們要把系統(tǒng)里邊一些執(zhí)行速度非常慢的sql語句給收起起來,并做分析優(yōu)化,使得其執(zhí)行速度加快。

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

搞定mysql優(yōu)化,十分鐘就夠了

總結(jié):

1. 水平分表設(shè)計(jì)

分的是數(shù)據(jù)記錄

a) 邏輯分表

求余:key/hash 范圍:range/list

創(chuàng)建/增加分表:新建表時(shí)、分表創(chuàng)建完畢還可以增加

刪除分表:key/hash不會(huì)造成數(shù)據(jù)丟失

range/list能造成數(shù)據(jù)丟失

b) 物理分表

php代碼需要增加算法邏輯

2. 垂直分表

分的是表的字段

3. 架構(gòu)設(shè)計(jì)

架構(gòu)集群有兩種方式:

① 互為備份

② 主從模式[常用]

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多