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

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

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

接著上一篇學習:http://m.fzitv.net/article/70528.htm

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

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

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

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

統(tǒng)計表-準實時優(yōu)化

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

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

字符存儲類型

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

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

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

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

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

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

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

1.READ UNCOMMITTED

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

2.READ COMMITTED

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

3. REPEATABLE READ

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

4.SERIALIZABLE

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

八、可擴展性設(shè)計之數(shù)據(jù)切分

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

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

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

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

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

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

垂直切分的缺點

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

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

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

◆切分達到一定程度之后,擴展性會遇到限制;

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

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

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

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

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

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

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

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

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

水平切分的缺點

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • 詳解MySQL語句中的DDL

    詳解MySQL語句中的DDL

    這篇文章主要詳細介紹了SQL語句中的DDL,文章中有詳細的代碼示例以及圖文介紹,對我們的學習或工作有一定的幫助,感興趣的同學可以參考閱讀
    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ù)的實現(xiàn)

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

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

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

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

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

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

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

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

    MySQL學習之數(shù)據(jù)庫操作DML詳解小白篇

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

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

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

    MySQL字符集中文亂碼解析

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

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

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

最新評論

泸定县| 方正县| 屯门区| 吉安市| 德兴市| 遂昌县| 承德市| 根河市| 岳普湖县| 巴青县| 八宿县| 合山市| 洪湖市| 曲阜市| 多伦县| 崇明县| 句容市| 满洲里市| 嵊泗县| 辽阳市| 闻喜县| 乌兰察布市| 白玉县| 绥阳县| 屏南县| 峨边| 中江县| 咸宁市| 荣成市| 普洱| 苍山县| 盈江县| 本溪市| 湘乡市| 佛坪县| 上虞市| 临颍县| 楚雄市| 哈巴河县| 太仆寺旗| 多伦县|