從LNMP體系來(lái)看MySQL

提綱

簡(jiǎn)述MySQL在LNMP體系中的地位

需要掌握的MySQL技能

    + 常用的SQL語(yǔ)句
    + 高效的SQL語(yǔ)句
    + 索引基礎(chǔ)知識(shí)
    + 主備拓?fù)浣Y(jié)構(gòu)
    + 擴(kuò)展
    + 集群

題外話庇麦,行文風(fēng)格

正文

普通phper的日常甚至主要工作是使用PHP和常用的SQL語(yǔ)句實(shí)現(xiàn)增刪查改的功能。若開(kāi)發(fā)的項(xiàng)目苍日,通過(guò)API獲取數(shù)據(jù),連增刪查改數(shù)據(jù)庫(kù)也不用寫(xiě)了宴卖。一般的公司的大部分PHP開(kāi)發(fā)崗位县踢,數(shù)據(jù)量不大瘸彤,所開(kāi)發(fā)的功能,利用幾種常用的技術(shù)知識(shí)點(diǎn)就能完成徊哑。PHP開(kāi)發(fā)所做的工作袜刷,實(shí)際上就是根據(jù)產(chǎn)品的需求,用代碼去實(shí)現(xiàn)那些業(yè)務(wù)邏輯莺丑。寫(xiě)業(yè)務(wù)邏輯著蟹,無(wú)競(jìng)爭(zhēng)力。做了兩年的開(kāi)發(fā)人員能做的業(yè)務(wù)邏輯開(kāi)發(fā)工作梢莽,一個(gè)靠譜的實(shí)習(xí)生就能完成萧豆。再看看工資比較高的PHP開(kāi)發(fā)崗位招聘,往往要求具備大流量昏名、高并發(fā)和MySQL大數(shù)據(jù)量設(shè)計(jì)涮雷、優(yōu)化經(jīng)驗(yàn)。一個(gè)矛盾產(chǎn)生了:大部分PHPer每天都在寫(xiě)業(yè)務(wù)邏輯轻局,工作中從未接觸過(guò)大數(shù)據(jù)量場(chǎng)景洪鸭,怎么會(huì)獲得大流量等經(jīng)驗(yàn)?如果PHPer不在業(yè)余時(shí)間學(xué)習(xí)仑扑,不要說(shuō)經(jīng)驗(yàn)卿嘲,連大流量高并發(fā)的基本知識(shí)都不會(huì)有。

本文目的是簡(jiǎn)單梳理作為PHPer應(yīng)該掌握到何種程度夫壁,就不再啰嗦MySQL的重要性了。一言以蔽之:要成為高級(jí)PHPer沃疮,要相當(dāng)重視MySQL盒让。掌握了MySQL,可以拉開(kāi)和一大批初中級(jí)同行的差距司蔬。

最基礎(chǔ)的SQL語(yǔ)句邑茄。

  1. 查詢數(shù)據(jù)。
  2. 增加數(shù)據(jù)俊啼。
  3. 修改數(shù)據(jù)肺缕。
  4. 刪除數(shù)據(jù)。

最基本的高效的SQL語(yǔ)句。

  1. 查詢數(shù)據(jù)使避免使用

SELECT * FROM tableName

應(yīng)該使用

SELECT username,createTime FROM tableName

  1. 查詢數(shù)據(jù)盡量避免一次性取出所有數(shù)據(jù)同木,應(yīng)該使用LIMIT浮梢。
  2. 插入多條數(shù)據(jù)時(shí),一次性插入彤路,不應(yīng)該多次循環(huán)插入秕硝。
  3. 獲取數(shù)據(jù)數(shù)量,使用

SELECT COUNT(*) FROM tableName

索引基礎(chǔ)知識(shí)洲尊。

  1. 索引選用遵循最左前綴原則远豺。
  2. 索引選用不能跳過(guò)中間索引。
  3. 索引選用中不能包含函數(shù)和需要運(yùn)算的表達(dá)式坞嘀。
  4. 索引選用中不能包含比較條件躯护,可以使用IN條件。
  5. 索引會(huì)造成系統(tǒng)開(kāi)銷丽涩,故應(yīng)該清理無(wú)用索引棺滞。

主備拓?fù)浣Y(jié)構(gòu)。

主備拓?fù)浣Y(jié)構(gòu)也叫主從結(jié)構(gòu)内狸,適用于讀密集型應(yīng)用检眯,對(duì)提高寫(xiě)能力沒(méi)有用。主備結(jié)構(gòu)分為主備結(jié)構(gòu)昆淡、主(主動(dòng))- 主(主動(dòng))結(jié)構(gòu)锰瘸、主(主動(dòng)) - 主(被動(dòng))。

一個(gè)主庫(kù)可以有多個(gè)備庫(kù)昂灵,一個(gè)備庫(kù)有且只能有一個(gè)主庫(kù)避凝。

主備拓?fù)浣Y(jié)構(gòu),涉及到的知識(shí)點(diǎn)有:復(fù)制眨补、二進(jìn)制日志管削、中繼日志。其中的每一點(diǎn)都可以寫(xiě)一段撑螺,都需要實(shí)際操作含思。復(fù)制延遲,更是一個(gè)很麻煩的問(wèn)題甘晤。

數(shù)據(jù)庫(kù)的擴(kuò)展含潘。

它分為垂直擴(kuò)展(向內(nèi)擴(kuò)展)和水平擴(kuò)展(向外擴(kuò)展)。

垂直擴(kuò)展线婚,是指升級(jí)硬件設(shè)備遏弱。這種擴(kuò)展不需要對(duì)應(yīng)用程序做出任何改變,在無(wú)資源修改應(yīng)用程序或使用其他方法提升性能瓶頸的時(shí)候塞弊,是最快速有效的漱逸。但好的硬件很貴泪姨,而且硬件再好,到一定程度也無(wú)法提升性能饰抒。原因之一是MySQL無(wú)法充分發(fā)揮硬件的性能肮砾。

這個(gè)時(shí)候,就應(yīng)該考慮水平擴(kuò)展了循集。水平擴(kuò)展是指分區(qū)(分庫(kù))唇敞、分表、主備結(jié)構(gòu)等單獨(dú)或綜合使用咒彤,還包括集群疆柔。它能提升寫(xiě)的性能。

這項(xiàng)技術(shù)中镶柱,需要掌握的知識(shí)點(diǎn)有:

  1. 根據(jù)什么分區(qū)旷档、分表?有根據(jù)功能劃分的歇拆,比如單機(jī)架構(gòu)鞋屈,把用戶、新聞故觅、評(píng)論放在一臺(tái)服務(wù)器上厂庇。如果分區(qū)分表,就會(huì)把三者分別放到一臺(tái)服務(wù)器上输吏。
  2. 分區(qū)权旷、分表,如何確定表的名稱贯溅?答案是使用路由方案拄氯。
  3. 分區(qū)分表后,如何進(jìn)行普通查詢它浅?如何進(jìn)行聚合查詢(比如常用的分頁(yè)查詢)译柏?解決方法是使用抽象數(shù)據(jù)層。Java姐霍、PHP已經(jīng)有成熟的解決方案鄙麦。
  4. 數(shù)據(jù)不一致,怎么解決镊折?

拓展方案比較復(fù)雜黔衡,實(shí)際運(yùn)行過(guò)程中可能會(huì)更復(fù)雜。專家的建議是:遇到性能問(wèn)題是腌乡,先從索引、查詢優(yōu)化夜牡、應(yīng)用程序入手優(yōu)化与纽,能不在數(shù)據(jù)庫(kù)層面擴(kuò)展就不要擴(kuò)展侣签。

《代碼大全》中提倡寫(xiě)代碼要自上而下地寫(xiě)。先寫(xiě)出抽象層次最高的偽代碼急迂,然后再寫(xiě)下個(gè)層次的代碼影所,層層遞減,直至不可再分割僚碎,才開(kāi)始寫(xiě)正式代碼猴娩。這種寫(xiě)法可以讓程序員專注于更少甚至是一個(gè)層面,對(duì)智力要求會(huì)低一些勺阐。

有感于此卷中,今后寫(xiě)文章,先寫(xiě)提綱渊抽,再細(xì)化提綱蟆豫,最終匯聚成文。即使寫(xiě)得不好懒闷,也能保證條理清晰十减。

由此引伸出一個(gè)話題:我提倡寫(xiě)短小、封裝的代碼愤估,卻羨慕那些能夠?qū)懗鲆粋€(gè)長(zhǎng)達(dá)幾百行的方法的程序員帮辟。雖然他的編程實(shí)踐不好,但是卻說(shuō)明他的智力水平高:思維可以專注那么多的邏輯層次玩焰,還可以保證代碼不出錯(cuò)由驹、出錯(cuò)了也可以調(diào)整。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末震捣,一起剝皮案震驚了整個(gè)濱河市荔棉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒿赢,老刑警劉巖润樱,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異羡棵,居然都是意外死亡壹若,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)店展,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赂蕴,你說(shuō)我怎么就攤上這事〔罢停” “怎么了碧注?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵糖赔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我放典,道長(zhǎng)逝变,這世上最難降的妖魔是什么奋构? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮声怔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醋火。我一直安慰自己悠汽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布芥驳。 她就那樣靜靜地躺著柿冲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兆旬。 梳的紋絲不亂的頭發(fā)上假抄,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音丽猬,去河邊找鬼宿饱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脚祟,可吹牛的內(nèi)容都是我干的谬以。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼由桌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼为黎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起行您,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铭乾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后娃循,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體炕檩,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捌斧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笛质。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吹泡。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖经瓷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洞难,我是刑警寧澤舆吮,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站队贱,受9級(jí)特大地震影響色冀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柱嫌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一锋恬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧编丘,春花似錦与学、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抑片,卻和暖如春卵佛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敞斋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工截汪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留植捎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓丢郊,卻偏偏與公主長(zhǎng)得像医咨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拟淮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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