国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL高級(jí)第十一篇:數(shù)據(jù)庫(kù)調(diào)優(yōu)策略(定位-調(diào)優(yōu)-結(jié)構(gòu))

這篇具有很好參考價(jià)值的文章主要介紹了MySQL高級(jí)第十一篇:數(shù)據(jù)庫(kù)調(diào)優(yōu)策略(定位-調(diào)優(yōu)-結(jié)構(gòu))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、數(shù)據(jù)庫(kù)調(diào)優(yōu)的目標(biāo)

  • 1.盡可能節(jié)省系統(tǒng)資源,以便系統(tǒng)可以提供更大負(fù)荷的服務(wù)。(吞吐量更大)
  • 2.合理的結(jié)構(gòu)設(shè)計(jì)和參數(shù)調(diào)整,以提高用戶操作響應(yīng)的速度。(響應(yīng)速度更快)
  • 3.減少系統(tǒng)的瓶頸,提高M(jìn)ySQL數(shù)據(jù)庫(kù)整體的性能。

二、調(diào)優(yōu)時(shí)如何定位問(wèn)題?

1. 用戶的反饋★

  • 用戶是我們的服務(wù)對(duì)象,因此他們的反饋是最直接的。雖然他們不會(huì)直接提出技術(shù)建議,但是有些問(wèn)題往往是用戶第一時(shí)間發(fā)現(xiàn)的。我們要重視用戶的反饋,找到和數(shù)據(jù)相關(guān)的問(wèn)題。

2. 日志分析★

  • 通過(guò)查看數(shù)據(jù)庫(kù)日志和操作系統(tǒng)日志等方式找出異常情況,通過(guò)它們來(lái)定位遇到的問(wèn)題。

3. 服務(wù)器資源使用監(jiān)控

  • 通過(guò)監(jiān)控服務(wù)器的CPU、內(nèi)存、I/O等使用情況,可以實(shí)時(shí)了解服務(wù)器的性能使用,與歷史情況進(jìn)行對(duì)比。

4. 數(shù)據(jù)庫(kù)內(nèi)部狀況監(jiān)控

  • 在數(shù)據(jù)庫(kù)的監(jiān)控中,活動(dòng)會(huì)話(Active Session)監(jiān)控是一個(gè)重要的指標(biāo)。通過(guò)它,可以清楚地了解數(shù)據(jù)庫(kù)當(dāng)前是否處于非常繁忙的狀態(tài),是否存在SQL堆積等。

5. 其它

  • 除了活動(dòng)會(huì)話監(jiān)控以外,也可以對(duì)事務(wù)、鎖等待等進(jìn)行監(jiān)控,這些都可以幫助我們對(duì)數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)有更全面的認(rèn)識(shí)。

三、數(shù)據(jù)庫(kù)調(diào)優(yōu)步驟

第1步:選擇適合的DBMS

DBMS的選擇關(guān)系到了后面的整個(gè)設(shè)計(jì)過(guò)程,所以首先要選擇適合的DBMS,如果是確定好的系統(tǒng)直接第二步

  • 如果對(duì)事務(wù)性處理以及安全性要求高的話,可以選擇商業(yè)的數(shù)據(jù)庫(kù)產(chǎn)品。這些數(shù)據(jù)庫(kù)在事務(wù)處理和查詢性能上都比較強(qiáng),比如采用SQL Server、Oracle,單表存儲(chǔ)上億條數(shù)據(jù)是沒(méi)有問(wèn)題的。如果數(shù)據(jù)表設(shè)計(jì)得好,即使不采用分庫(kù)分表的方式,查詢效率也不差。
  • 除此以外,也可以采用開源的MySQL進(jìn)行存儲(chǔ),它有很多存儲(chǔ)引擎可以選擇,如果進(jìn)行事務(wù)處理的話可以選擇InnoDB,非事務(wù)處理可以選擇MylSAM。
  • NoSQL陣營(yíng)包括鍵值型數(shù)據(jù)庫(kù)、文檔型數(shù)據(jù)庫(kù)、搜索引擎、列式存儲(chǔ)和圖形數(shù)據(jù)庫(kù)。這些數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)和使用場(chǎng)景各有不同,比如列式存儲(chǔ)數(shù)據(jù)庫(kù)可以大幅度降低系統(tǒng)的I/O,適合于分布式文件系統(tǒng),但如果數(shù)據(jù)需要頻繁地增刪改,那么列式存儲(chǔ)就不太適用了。

第2步:優(yōu)化表設(shè)計(jì)

RDBMS中,每個(gè)對(duì)象都可以定義為一張表,表與表之間的關(guān)系代表了對(duì)象之間的關(guān)系。如果用的是MySQL,還可以根據(jù)不同表的使用需求,選擇不同的存儲(chǔ)引擎。

  • 1.表結(jié)構(gòu)要盡量遵循三范式的原則。這樣可以讓數(shù)據(jù)結(jié)構(gòu)更加清晰規(guī)范,減少冗余字段,同時(shí)也減少了在更新,插入和刪除數(shù)據(jù)時(shí)等異常情況的發(fā)生。
  • 2.如果查詢應(yīng)用比較多,尤其是需要進(jìn)行多表聯(lián)查的時(shí)候,可以采用反范式進(jìn)行優(yōu)化。反范式采用空間換時(shí)間的方式,通過(guò)增加冗余字段提高查詢的效率。
  • 3.表字段的數(shù)據(jù)類型選擇,關(guān)系到了查詢效率的高低以及存儲(chǔ)空間的大小。一般來(lái)說(shuō),如果字段可以采用數(shù)值類型就不要采用字符類型;字符長(zhǎng)度要盡可能設(shè)計(jì)得短一些。針對(duì)字符類型來(lái)說(shuō),當(dāng)確定字符長(zhǎng)度固定時(shí),就可以采用CHAR類型;當(dāng)長(zhǎng)度不固定時(shí),通常采用VARCHAR類型。

第3步:優(yōu)化邏輯查詢

  • SQL查詢優(yōu)化,可以分為邏輯查詢優(yōu)化和物理查詢優(yōu)化。邏輯查詢優(yōu)化就是通過(guò)改變SQL語(yǔ)句的內(nèi)容讓SQL執(zhí)行效率更高效,采用的方式是對(duì)SQL語(yǔ)句進(jìn)行等價(jià)變換,對(duì)查詢進(jìn)行重寫。
  • SQL的查詢重寫包括了子查詢優(yōu)化、等價(jià)謂詞重寫、視圖重寫、條件簡(jiǎn)化、連接消除和嵌套連接消除等。

第4步:優(yōu)化物理查詢

索引的創(chuàng)建和使用
索引相關(guān)問(wèn)題前邊幾章節(jié)已經(jīng)詳細(xì)剖析過(guò),這里不在贅述。

第5步:考慮使用緩存

除了可以對(duì)SQL本身進(jìn)行優(yōu)化以外,還可以請(qǐng)外援提升查詢的效率。

  • 因?yàn)閿?shù)據(jù)都存放到數(shù)據(jù)庫(kù)中,我們需要從數(shù)據(jù)庫(kù)層中取出數(shù)據(jù)放到內(nèi)存中進(jìn)行業(yè)務(wù)邏輯的操作,當(dāng)用戶量增大的時(shí)候,如果頻繁地進(jìn)行數(shù)據(jù)查詢,會(huì)消耗數(shù)據(jù)庫(kù)很多資源。如果將常用的數(shù)據(jù)直接放到內(nèi)存中,就會(huì)大幅提升查詢的效率。
  • 常用的鍵值存儲(chǔ)數(shù)據(jù)庫(kù)有 Redis和Memcached,它們都可以將數(shù)據(jù)存放到內(nèi)存中。
  • 從可靠性來(lái)說(shuō),Redis支持持久化,可以讓我們的數(shù)據(jù)保存在硬盤上,不過(guò)這樣一來(lái)性能消耗也會(huì)比較大。而Memcached僅僅是內(nèi)存存儲(chǔ),不支持持久化。
  • 從支持的數(shù)據(jù)類型來(lái)說(shuō),Redis 比 Memcached要多,它不僅支持key-value類型的數(shù)據(jù),還支持List,Set,Hash等數(shù)據(jù)結(jié)構(gòu)。

第6步:庫(kù)級(jí)優(yōu)化

  • 讀寫分離
  • 如果讀和寫的業(yè)務(wù)量都很大,并且它們都在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中進(jìn)行操作,那么數(shù)據(jù)庫(kù)的性能就會(huì)出現(xiàn)瓶頸,這時(shí)為了提升系統(tǒng)的性能,優(yōu)化用戶體驗(yàn),我們可以采用讀寫分離的方式降低主數(shù)據(jù)庫(kù)的負(fù)載,比如用主數(shù)據(jù)庫(kù)完成寫操作,用從數(shù)據(jù)庫(kù)完成讀操作。
    MySQL高級(jí)第十一篇:數(shù)據(jù)庫(kù)調(diào)優(yōu)策略(定位-調(diào)優(yōu)-結(jié)構(gòu))
  • 分庫(kù)分表
  • 當(dāng)數(shù)據(jù)量級(jí)達(dá)到千萬(wàn)級(jí)以上時(shí),有時(shí)候我們需要把一個(gè)數(shù)據(jù)庫(kù)切成多份,放到不同的數(shù)據(jù)庫(kù)服務(wù)器上,減少對(duì)單一數(shù)據(jù)庫(kù)服務(wù)器的訪問(wèn)壓力。如果使用的是MySQL,就可以使用MySQL自帶的分區(qū)表功能,也可以自己做垂直拆分(分庫(kù))、水平拆分(分表)、垂直+水平拆分(分庫(kù)分表)。

四、數(shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化

1. 拆分表(冷熱分離)

  • 把1個(gè)包含很多字段的表拆分成2個(gè)或者多個(gè)相對(duì)較小的表。
  • 因?yàn)檫@些表中某些字段的操作頻率很高(熱數(shù)據(jù)),經(jīng)常要進(jìn)行查詢或者更新操作,而另外一些字段的使用頻率卻很低(冷數(shù)據(jù)),冷熱數(shù)據(jù)分離,可以減小表的寬度
  • 如果放在一個(gè)表里面,每次查詢都要讀取大記錄,會(huì)消耗較多的資源。
  • MySQL限制每個(gè)表最多存儲(chǔ)4096列,并且每一行數(shù)據(jù)的大小不能超過(guò)65535字節(jié)。
  • 表越寬,把表裝載進(jìn)內(nèi)存緩沖池時(shí)所占用的內(nèi)存也就越大,也會(huì)消耗更多的I/O。
  • 冷熱數(shù)據(jù)分離的目的是:①減少磁盤I/O,保證熱數(shù)據(jù)的內(nèi)存緩存命中率。②更有效的利用緩存,避免讀入無(wú)用的冷數(shù)據(jù)。

2. 增加中間表、冗余字段

  • 對(duì)于需要經(jīng)常聯(lián)合查詢的表,可以建立中間表以提高查詢效率。

  • 通過(guò)建立中間表,把需要經(jīng)常聯(lián)合查詢的數(shù)據(jù)插入中間表中,然后將原來(lái)的聯(lián)合查詢改為對(duì)中間表的查詢,以此來(lái)提高查詢效率。

  • 另外,表的規(guī)范化程度越高,表與表之間的關(guān)系就越多,需要連接查詢的情況也就越多。尤其在數(shù)據(jù)量大,而且需要頻繁進(jìn)行連接的時(shí)候,為了提升效率,我們也可以考慮增加冗余字段來(lái)減少連接。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-409290.html

3. 優(yōu)化字段數(shù)據(jù)類型

  • 優(yōu)先選擇符合存儲(chǔ)需要的最小的數(shù)據(jù)類型。
  • 列的字段越大,建立索引時(shí)所需要的空間也就越大,這樣一頁(yè)中所能存儲(chǔ)的索引節(jié)點(diǎn)的數(shù)量也就越少,在遍歷時(shí)所需要的IO次數(shù)也就越多,索引的性能也就越差。

五、單表記錄過(guò)大優(yōu)化

  • 1、限定查詢范圍,使用上查詢條件,索引。
  • 2、讀寫分離
    MySQL高級(jí)第十一篇:數(shù)據(jù)庫(kù)調(diào)優(yōu)策略(定位-調(diào)優(yōu)-結(jié)構(gòu))
  • 3、垂直拆分,水平拆分

到了這里,關(guān)于MySQL高級(jí)第十一篇:數(shù)據(jù)庫(kù)調(diào)優(yōu)策略(定位-調(diào)優(yōu)-結(jié)構(gòu))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 《MySQL》第十一篇 SQL_MODEL模式簡(jiǎn)述

    SQL Mode定義了MySQL應(yīng)支持的SQL語(yǔ)法、數(shù)據(jù)校驗(yàn)等,這樣可以更容易地在不同的環(huán)境中使用MySQL 常用來(lái)解決下面幾類問(wèn)題: 通過(guò)設(shè)置SQL Mode,可以完成不同嚴(yán)格程度的數(shù)據(jù)校驗(yàn),有效地保障數(shù)據(jù)準(zhǔn)確性。 通過(guò)設(shè)置SQL Mode為ANSI模式,來(lái)保證大多數(shù)SQL符合標(biāo)準(zhǔn)的SQL語(yǔ)法,這樣應(yīng)用在

    2024年02月15日
    瀏覽(23)
  • 性能測(cè)試之Mysql數(shù)據(jù)庫(kù)調(diào)優(yōu)

    性能調(diào)優(yōu)前提:無(wú)監(jiān)控不調(diào)優(yōu),對(duì)于mysql性能的監(jiān)控前幾天有文章提到過(guò),有興趣的朋友可以去看一下 1、我們?cè)诒O(jiān)控圖表中關(guān)注的性能指標(biāo)大概有這么幾個(gè):CPU、內(nèi)存、連接數(shù)、io讀寫時(shí)間、io操作時(shí)間、慢查詢、系統(tǒng)平均負(fù)載以及memoryOver 2、介紹下Grafana模板中各性能指標(biāo)的

    2024年02月04日
    瀏覽(38)
  • 面試八股文Mysql:(2)數(shù)據(jù)庫(kù)調(diào)優(yōu)

    面試八股文Mysql:(2)數(shù)據(jù)庫(kù)調(diào)優(yōu)

    數(shù)據(jù)庫(kù)優(yōu)化在提升系統(tǒng)性能是很重要的一個(gè)方面,不管是MySQL還是MongoDB還是其它的數(shù)據(jù)庫(kù)。 SQL優(yōu)化在提升系統(tǒng)性能中是成本最低 優(yōu)化效果最明顯的途徑,可以讓 吞吐量更大,響應(yīng)速度更快 。如果你的團(tuán)隊(duì)在SQL優(yōu)化這方面搞得很優(yōu)秀,對(duì)你們整個(gè)大型系統(tǒng)可用性方面無(wú)疑是一

    2024年02月13日
    瀏覽(29)
  • MYSQL數(shù)據(jù)庫(kù)連接池及常見參數(shù)調(diào)優(yōu)

    數(shù)據(jù)庫(kù)連接池是一種用于優(yōu)化數(shù)據(jù)庫(kù)連接的技術(shù),它通過(guò)在應(yīng)用程序和數(shù)據(jù)庫(kù)之間建立一個(gè)連接池來(lái)管理和復(fù)用數(shù)據(jù)庫(kù)連接,以提高數(shù)據(jù)庫(kù)訪問(wèn)效率和性能。數(shù)據(jù)庫(kù)連接池通常包含以下參數(shù): 初始連接數(shù)(initialSize):連接池初始建立的連接數(shù); 最小連接數(shù)(minIdle):連接

    2024年02月05日
    瀏覽(23)
  • 軟考高級(jí)系統(tǒng)架構(gòu)設(shè)計(jì)師系列論文九十一:論分布式數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)

    軟考高級(jí)系統(tǒng)架構(gòu)設(shè)計(jì)師系列之:分布式存儲(chǔ)技術(shù)

    2024年02月10日
    瀏覽(27)
  • 【MySQL數(shù)據(jù)庫(kù) | 第十五篇】事務(wù)

    【MySQL數(shù)據(jù)庫(kù) | 第十五篇】事務(wù)

    ? ? 目錄 ? ?前言: ?介紹事務(wù): ?控制事務(wù): ?事務(wù)四大特性: ?并發(fā)事務(wù)問(wèn)題: ?事務(wù)隔離級(jí)別: 總結(jié): ? 這章我們將進(jìn)入到MySQL基礎(chǔ)篇的最后一章:事務(wù),希望大家可以堅(jiān)持下去,跟著我一起走完MySQL的學(xué)習(xí)之旅。 MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),支持事務(wù)管理。 事

    2024年02月08日
    瀏覽(22)
  • 【MySQL數(shù)據(jù)庫(kù) | 第十二篇】:約束

    【MySQL數(shù)據(jù)庫(kù) | 第十二篇】:約束

    在MySQL中, 約束是一種限制數(shù)據(jù)表中列值的規(guī)定 。保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)正確,有效性和完整性。MySQL中的約束有以下幾種: 1. 主鍵約束(Primary Key Constraint) :主鍵是用于唯一標(biāo)識(shí)表中每行記錄的列。主鍵約束要求 每個(gè)主鍵列的值都是唯一的,且不能為NULL 。一個(gè)表只能有一

    2024年02月08日
    瀏覽(18)
  • 【MySQL數(shù)據(jù)庫(kù) | 第十六篇】存儲(chǔ)引擎

    【MySQL數(shù)據(jù)庫(kù) | 第十六篇】存儲(chǔ)引擎

    目錄 ?前言: ?MySQL體系結(jié)構(gòu)圖: 存儲(chǔ)引擎簡(jiǎn)介: 1. InnoDB存儲(chǔ)引擎: 2. MyISAM存儲(chǔ)引擎: 3. MEMORY存儲(chǔ)引擎: 4. NDB Cluster存儲(chǔ)引擎: 5. ARCHIVE存儲(chǔ)引擎: 存儲(chǔ)引擎語(yǔ)法: ACID與行級(jí)鎖: ?總結(jié): 經(jīng)過(guò)前面15篇的學(xué)習(xí),我們已經(jīng)學(xué)完了SQL的基本語(yǔ)法內(nèi)容,大致掌握了數(shù)據(jù)庫(kù)的操作

    2024年02月08日
    瀏覽(116)
  • MySQL數(shù)據(jù)庫(kù)期末復(fù)習(xí)--這一篇就夠了

    MySQL數(shù)據(jù)庫(kù)期末復(fù)習(xí)--這一篇就夠了

    目錄 一、前言 二、一些基本概念 1、時(shí)態(tài)數(shù)據(jù)庫(kù) 2、分布式數(shù)據(jù)庫(kù) 3、面向?qū)ο髷?shù)據(jù)庫(kù) 4、移動(dòng)數(shù)據(jù)庫(kù) 三、數(shù)據(jù)庫(kù)的創(chuàng)建 1、工具 2、基本需求 3、根據(jù)上述需求畫出E-R圖 4、將E-R圖轉(zhuǎn)換成關(guān)系模式 5、建立數(shù)據(jù)表 6、每張數(shù)據(jù)表的結(jié)構(gòu) 四、視圖 1、創(chuàng)建視圖 2、查看視圖? 3、更

    2024年02月09日
    瀏覽(17)
  • 【MySQL數(shù)據(jù)庫(kù) | 第十三篇】多表查詢

    【MySQL數(shù)據(jù)庫(kù) | 第十三篇】多表查詢

    多表查詢是指在一個(gè)SQL語(yǔ)句中使用多個(gè)表進(jìn)行數(shù)據(jù)查詢和操作。多表查詢可以對(duì)數(shù)據(jù)表之間的關(guān)系進(jìn)行查詢,例如可以通過(guò)連接多個(gè)表來(lái)獲取更完整的數(shù)據(jù)信息。關(guān)于單表查詢我們也介紹過(guò),已經(jīng)整理成文章發(fā)布:【MySQL數(shù)據(jù)庫(kù) | 第九篇】DQL操作_我是一盤牛肉的博客-CSDN博客

    2024年02月08日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包