最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解MySQL性能優(yōu)化(二)

 更新時(shí)間:2015年08月03日 17:03:56   投稿:lijiao  
本文對MySQL性能優(yōu)化進(jìn)行了詳細(xì)的總結(jié)與介紹,需要的朋友可以參考下

接著上一篇學(xué)習(xí):http://www.fzitv.net/article/70528.htm

七、MySQL數(shù)據(jù)庫Schema設(shè)計(jì)的性能優(yōu)化
高效的模型設(shè)計(jì)

適度冗余-讓Query盡兩減少Join

大字段垂直分拆-summary表優(yōu)化

大表水平分拆-基于類型的分拆優(yōu)化

統(tǒng)計(jì)表-準(zhǔn)實(shí)時(shí)優(yōu)化

合適的數(shù)據(jù)類型

時(shí)間存儲(chǔ)格式總類并不是太多,我們常用的主要就是DATETIME,DATE和TIMESTAMP這三種了。從存儲(chǔ)空間來看TIMESTAMP最少,四個(gè)字節(jié),而其他兩種數(shù)據(jù)類型都是八個(gè)字節(jié),多了一倍。而TIMESTAMP的缺點(diǎn)在于他只能存儲(chǔ)從1970年之后的時(shí)間,而另外兩種時(shí)間類型可以存放最早從1001年開始的時(shí)間。如果有需要存放早于1970年之前的時(shí)間的需求,我們必須放棄TIMESTAMP類型,但是只要我們不需要使用1970年之前的時(shí)間,最好盡量使用TIMESTAMP來減少存儲(chǔ)空間的占用。

字符存儲(chǔ)類型

CHAR[(M)]類型屬于靜態(tài)長度類型,存放長度完全以字符數(shù)來計(jì)算,所以最終的存儲(chǔ)長度是基于字符集的,如latin1則最大存儲(chǔ)長度為255字節(jié),但是如果使用gbk則最大存儲(chǔ)長度為510字節(jié)。CHAR類型的存儲(chǔ)特點(diǎn)是不管我們實(shí)際存放多長數(shù)據(jù),在數(shù)據(jù)庫中都會(huì)存放M個(gè)字符,不夠的通過空格補(bǔ)上,M默認(rèn)為1。雖然CHAR會(huì)通過空格補(bǔ)齊存放的空間,但是在訪問數(shù)據(jù)的時(shí)候,MySQL會(huì)忽略最后的所有空格,所以如果我們的實(shí)際數(shù)據(jù)中如果在最后確實(shí)需要空格,則不能使用CHAR類型來存放。

VARCHAR[(M)]屬于動(dòng)態(tài)存儲(chǔ)長度類型,僅存占用實(shí)際存儲(chǔ)數(shù)據(jù)的長度。TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT這四種類型同屬于一種存儲(chǔ)方式,都是動(dòng)態(tài)存儲(chǔ)長度類型,不同的僅僅是最大長度的限制。

事務(wù)優(yōu)化

1. 臟讀:臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問數(shù)據(jù),并且對數(shù)據(jù)進(jìn)行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時(shí),另外一個(gè)事務(wù)也訪問這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。

2. 不可重復(fù)讀:是指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個(gè)事務(wù)還沒有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,那么第一個(gè)事務(wù)兩次讀到的的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復(fù)讀。

3. 幻讀:是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。

Innodb在事務(wù)隔離級別方面支持的信息如下:

1.READ UNCOMMITTED

常被成為Dirty Reads(臟讀),可以說是事務(wù)上的最低隔離級別:在普通的非鎖定模式下SELECT的執(zhí)行使我們看到的數(shù)據(jù)可能并不是查詢發(fā)起時(shí)間點(diǎn)的數(shù)據(jù),因而在這個(gè)隔離度下是非Consistent Reads(一致性讀);

2.READ COMMITTED

這一隔離級別下,不會(huì)出現(xiàn)DirtyRead,但是可能出現(xiàn)Non-RepeatableReads(不可重復(fù)讀)和PhantomReads(幻讀)。

3. REPEATABLE READ

REPEATABLE READ隔離級別是InnoDB默認(rèn)的事務(wù)隔離級。在REPEATABLE READ隔離級別下,不會(huì)出現(xiàn)DirtyReads,也不會(huì)出現(xiàn)Non-Repeatable Read,但是仍然存在PhantomReads的可能性。

4.SERIALIZABLE

SERIALIZABLE隔離級別是標(biāo)準(zhǔn)事務(wù)隔離級別中的最高級別。設(shè)置為SERIALIZABLE隔離級別之后,在事務(wù)中的任何時(shí)候所看到的數(shù)據(jù)都是事務(wù)啟動(dòng)時(shí)刻的狀態(tài),不論在這期間有沒有其他事務(wù)已經(jīng)修改了某些數(shù)據(jù)并提交。所以,SERIALIZABLE事務(wù)隔離級別下,PhantomReads也不會(huì)出現(xiàn)。

八、可擴(kuò)展性設(shè)計(jì)之?dāng)?shù)據(jù)切分

數(shù)據(jù)的垂直切分

數(shù)據(jù)的垂直切分,也可以稱之為縱向切分。將數(shù)據(jù)庫想象成為由很多個(gè)一大塊一大塊的“數(shù)據(jù)塊”(表)組成,我們垂直的將這些“數(shù)據(jù)塊”切開,然后將他們分散到多臺(tái)數(shù)據(jù)庫主機(jī)上面。這樣的切分方法就是一個(gè)垂直(縱向)的數(shù)據(jù)切分。

垂直切分的優(yōu)點(diǎn)

◆數(shù)據(jù)庫的拆分簡單明了,拆分規(guī)則明確;

◆應(yīng)用程序模塊清晰明確,整合容易;

◆數(shù)據(jù)維護(hù)方便易行,容易定位;

垂直切分的缺點(diǎn)

◆部分表關(guān)聯(lián)無法在數(shù)據(jù)庫級別完成,需要在程序中完成;

◆對于訪問極其頻繁且數(shù)據(jù)量超大的表仍然存在性能平靜,不一定能滿足要求;

◆事務(wù)處理相對更為復(fù)雜;

◆切分達(dá)到一定程度之后,擴(kuò)展性會(huì)遇到限制;

◆過讀切分可能會(huì)帶來系統(tǒng)過渡復(fù)雜而難以維護(hù)。

數(shù)據(jù)的水平切分

數(shù)據(jù)的垂直切分基本上可以簡單的理解為按照表按照模塊來切分?jǐn)?shù)據(jù),而水平切分就不再是按照表或者是功能模塊來切分了。一般來說,簡單的水平切分主要是將某個(gè)訪問極其平凡的表再按照某個(gè)字段的某種規(guī)則來分散到多個(gè)表之中,每個(gè)表中包含一部分?jǐn)?shù)據(jù)。

水平切分的優(yōu)點(diǎn)

◆表關(guān)聯(lián)基本能夠在數(shù)據(jù)庫端全部完成;

◆不會(huì)存在某些超大型數(shù)據(jù)量和高負(fù)載的表遇到瓶頸的問題;

◆應(yīng)用程序端整體架構(gòu)改動(dòng)相對較少;

◆事務(wù)處理相對簡單;

◆只要切分規(guī)則能夠定義好,基本上較難遇到擴(kuò)展性限制;

水平切分的缺點(diǎn)

◆切分規(guī)則相對更為復(fù)雜,很難抽象出一個(gè)能夠滿足整個(gè)數(shù)據(jù)庫的切分規(guī)則;

◆后期數(shù)據(jù)的維護(hù)難度有所增加,人為手工定位數(shù)據(jù)更困難;

◆應(yīng)用系統(tǒng)各模塊耦合度較高,可能會(huì)對后面數(shù)據(jù)的遷移拆分造成一定的困難。

數(shù)據(jù)切分與整合中可能存在的問題

1.引入分布式事務(wù)的問題

完全可以將一個(gè)跨多個(gè)數(shù)據(jù)庫的分布式事務(wù)分拆成多個(gè)僅處于單個(gè)數(shù)據(jù)庫上面的小事務(wù),并通過應(yīng)用程序來總控各個(gè)小事務(wù)。當(dāng)然,這樣作的要求就是我們的俄應(yīng)用程序必須要有足夠的健壯性,當(dāng)然也會(huì)給應(yīng)用程序帶來一些技術(shù)難度。

2.跨節(jié)點(diǎn)Join的問題

推薦通過應(yīng)用程序來進(jìn)行處理,先在驅(qū)動(dòng)表所在的MySQLServer中取出相應(yīng)的驅(qū)動(dòng)結(jié)果集,然后根據(jù)驅(qū)動(dòng)結(jié)果集再到被驅(qū)動(dòng)表所在的MySQL Server中取出相應(yīng)的數(shù)據(jù)。

3.跨節(jié)點(diǎn)合并排序分頁問題

從多個(gè)數(shù)據(jù)源并行的取數(shù)據(jù),然后應(yīng)用程序匯總處理。

九、可擴(kuò)展性設(shè)計(jì)之Cache與Search的利用

通過引入Cache(Redis、Memcached),減少數(shù)據(jù)庫的訪問,增加性能。

通過引入Search(Lucene、Solr、ElasticSearch),利用搜索引擎高效的全文索引和分詞算法,以及高效的數(shù)據(jù)檢索實(shí)現(xiàn),來解決數(shù)據(jù)庫和傳統(tǒng)的Cache軟件完全無法解決的全文模糊搜索、分類統(tǒng)計(jì)查詢等功能。

以上就是本文的全部內(nèi)容,希望大家可以喜歡。

相關(guān)文章

  • 詳解MySQL語句中的DDL

    詳解MySQL語句中的DDL

    這篇文章主要詳細(xì)介紹了SQL語句中的DDL,文章中有詳細(xì)的代碼示例以及圖文介紹,對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server

    php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server

    php 不能連接數(shù)據(jù)庫 php error Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    2011-05-05
  • Mysql循環(huán)插入數(shù)據(jù)的實(shí)現(xiàn)

    Mysql循環(huán)插入數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了Mysql循環(huán)插入數(shù)據(jù)的實(shí)現(xiàn)過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • linux 安裝 mysql 8.0.19 詳細(xì)步驟及問題解決方法

    linux 安裝 mysql 8.0.19 詳細(xì)步驟及問題解決方法

    這篇文章主要介紹了linux 安裝 mysql 8.0.19 詳細(xì)步驟,本文給大家列出了常見問題及解決方法,通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Mysql中的觸發(fā)器定義與使用

    Mysql中的觸發(fā)器定義與使用

    MySQL?的觸發(fā)器和存儲(chǔ)過程一樣,都是嵌入到?MySQL?中的一段程序,是?MySQL?中管理數(shù)據(jù)的有力工具,本文給大家詳細(xì)介紹mysql觸發(fā)器的定義語法知識(shí),感興趣的朋友一起看看吧
    2022-11-11
  • MySQL?5.5,?5.6,?5.7,?8.0?特性對比

    MySQL?5.5,?5.6,?5.7,?8.0?特性對比

    MySQL是一個(gè)廣泛使用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),你知道各個(gè)版本之前的區(qū)別嗎,本文主要介紹了MySQL?5.5,?5.6,?5.7,?8.0?特性對比,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫操作DML詳解小白篇

    MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫操作DML詳解小白篇

    本篇文章非常適合MySQl初學(xué)者,主要為大家講解了MySQL數(shù)據(jù)庫的常用操作,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日進(jìn)步升職加薪
    2021-09-09
  • mysql中的limit用法有哪些(推薦)

    mysql中的limit用法有哪些(推薦)

    在我們使用查詢語句的時(shí)候,經(jīng)常要返回前幾條或者中間某幾行數(shù)據(jù),這個(gè)時(shí)候怎么辦呢,mysql已經(jīng)為我們提供了這樣一個(gè)功能,盡管語法邏輯很是怪異,這個(gè)功能就好比oracle里的rownum,但比mysql提供的這個(gè)LIMIT好用、好記和好理解多了,具體內(nèi)容一起通過本文看看吧
    2017-10-10
  • MySQL字符集中文亂碼解析

    MySQL字符集中文亂碼解析

    這篇文章主要給大家解析了MySQL字符集中文亂碼的問題,文章通過代碼示例講解的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫的方法實(shí)現(xiàn)

    DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫的方法實(shí)現(xiàn)

    本文主要介紹了DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

阳朔县| 江都市| 南皮县| 大荔县| 新乡市| 蓝山县| 隆林| 文成县| 沙湾县| 施甸县| 北辰区| 南木林县| 社旗县| 桂平市| 个旧市| 弋阳县| 盐城市| 墨江| 浙江省| 云梦县| 淄博市| 巴林左旗| 阿图什市| 庐江县| 昭觉县| 衡南县| 久治县| 井冈山市| 南安市| 静宁县| 黄骅市| 贡嘎县| 东阳市| 开化县| 武冈市| 临湘市| 基隆市| 石景山区| 句容市| 四川省| 紫金县|