欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

帶你快速搞定Mysql優(yōu)化

 更新時(shí)間:2021年07月16日 08:48:46   作者:香菜聊游戲  
大部分的游戲數(shù)據(jù)庫都是使用mysql ,所以今天今天大概聊一下對(duì)數(shù)據(jù)庫的優(yōu)化原則問題,都是基于InnoDB 引擎,希望你能在遇到同樣的問題時(shí)能解決問題

1、查詢語句的執(zhí)行順序

select[distinct]  
from  
join(如left join)  
on  
where  
group by  
having  
union  
order by  
limit

執(zhí)行順序: from where having order limit

1from 先做表連接

2、where 進(jìn)行條件限制

3、然后做聚合 group by

4、然后做 having 過濾

5、然后對(duì)結(jié)果進(jìn)行排序

6、最后限制數(shù)量 limit

sql 的查詢執(zhí)行順序我想有些人還是記不住的,我的建議就是自己整理一個(gè)簡單的記憶短句,然后反復(fù)閱讀,直至記住,下次再遇到問題的時(shí)候自己回想下自己記憶的短句,能解決問題就行了,死記硬背就好,盡量簡短。

2、數(shù)據(jù)類型的選擇

• 更小的數(shù)據(jù)類型通常更好:因?yàn)楦玫拇鎯?chǔ)空間

• 簡單數(shù)據(jù)類型

• 盡量避免NULL:含NULL復(fù)合索引無效. 可為NULL的列會(huì)使用更多的存儲(chǔ)空間,在Mysql中也需要特殊處理。

TIMESTAMP空間利用比DATETIME小的多,比整形方便處理,整形不會(huì)帶來任何好處。

IPV4的地址,經(jīng)常使用VARCHAR(15)來存儲(chǔ)。然而它實(shí)際是32為無符號(hào)整數(shù),不是字符串。用小數(shù)點(diǎn)將地址分成四段只是為了讓人們?nèi)菀组喿x。

對(duì)象關(guān)系映射(ORM)系統(tǒng)(以及使用它們的“框架”)通常都是低效的,一些ORM系統(tǒng)會(huì)存儲(chǔ)任意類型的數(shù)據(jù)到任意類型的后端數(shù)據(jù)存儲(chǔ)中。這種設(shè)計(jì)對(duì)開發(fā)者很有吸引力,因?yàn)檫@使得開發(fā)者可以用面向?qū)ο蟮姆绞焦ぷ?,不需要考慮數(shù)據(jù)是怎么存儲(chǔ)的。

原則:盡可能?。ㄕ加么鎯?chǔ)空間少)、盡可能定長(占用存儲(chǔ)空間固定)、盡可能使用整數(shù)。

3、索引優(yōu)化

主鍵索引

InnoDB通過主鍵聚集數(shù)據(jù),數(shù)據(jù)按主鍵順序存儲(chǔ),更新主鍵索引列的代價(jià)很高,因?yàn)闀?huì)強(qiáng)制InnoDB將每個(gè)被更新的行移動(dòng)到新的位置

多列索引

一個(gè)常見的錯(cuò)誤就是為每個(gè)列創(chuàng)建單獨(dú)的索引,這種錯(cuò)誤的認(rèn)知一般都是聽了“把where條件里面的列都建上索引”這樣模糊的建議導(dǎo)致的。

實(shí)際上,在多個(gè)列上建立獨(dú)立的索引大部分情況下都不能提高mysql的查詢性能,有時(shí)反而會(huì)使查詢變的更慢。

因?yàn)樗饕枰~外的空間記錄,在查詢到時(shí)候如果索引使用不當(dāng),需要同時(shí)加載索引和數(shù)據(jù),會(huì)造成查詢慢。

注意:索引列的順序

正確的順序依賴于使用該索引的查詢,并且同時(shí)需要考慮如何更好地滿足排序和分組的需要

一般性的經(jīng)驗(yàn)法則:

1、將選擇性最高的列放在最前面

2、在查詢的時(shí)候不要對(duì)索引列進(jìn)行函數(shù)操作

3、盡可能的使用索引

4、查詢性能優(yōu)化

1、查詢的生命周期

客戶端 -> 服務(wù)器查詢緩存 -> 解析器 -> 預(yù)處理器 -> 查詢優(yōu)化器-> 查詢執(zhí)行引擎 -> 存儲(chǔ)引擎 -> 數(shù)據(jù)

盡量命中緩存,盡量少讀數(shù)據(jù),盡量少查數(shù)據(jù)。

2、SELECT語句盡量指明查詢字段名稱

  • select * 會(huì)增加不必要的消耗,如果使用的字段很少,會(huì)導(dǎo)致讀取的數(shù)據(jù)量變多,網(wǎng)絡(luò)傳輸也會(huì)變慢,消耗cpu,所以 select count(1) 優(yōu)于 select count(*)
  • 在表進(jìn)行修改的時(shí)候,代碼里的查詢字段可能會(huì)忘記修改,導(dǎo)致代碼報(bào)錯(cuò),是安全隱患。

3、小表驅(qū)動(dòng)大表

圖片

盡量少的關(guān)聯(lián)數(shù)據(jù)讀取,數(shù)據(jù)量越少越快,

注意:副表不存在的數(shù)據(jù)是null

優(yōu)化數(shù)據(jù)訪問原則:

1、是否向數(shù)據(jù)庫請(qǐng)求了不需要的數(shù)據(jù),減少數(shù)據(jù)加載和網(wǎng)絡(luò)傳輸

2、查詢是否掃描了大量不需要的記錄(返回的行數(shù)/掃描的行數(shù)),降低讀取數(shù)據(jù)的時(shí)間

總結(jié)

  • 使用小而簡單的合適的數(shù)據(jù)類型,盡量避免NULL
  • 避免過度設(shè)計(jì),例如會(huì)導(dǎo)致復(fù)雜查詢的schema設(shè)計(jì)
  • 合理混用范式化和反范式化設(shè)計(jì),以空間換時(shí)間,適當(dāng)?shù)娜哂鄮硭俣?/li>
  • 行訪問是很慢的,最好讀取的數(shù)據(jù)塊中能包含盡可能多所需要的行
  • 按順序訪問范圍數(shù)據(jù)是很快的
  • 當(dāng)數(shù)據(jù)量逐漸增大時(shí),不恰當(dāng)?shù)乃饕龝?huì)導(dǎo)致性能急劇下降

要想寫一個(gè)好的查詢,必須要理解schema設(shè)計(jì)、索引設(shè)計(jì)等知識(shí)。他們之間環(huán)環(huán)相扣,密不可分。只有綜合考慮各方需

求,權(quán)衡利弊,才能設(shè)計(jì)出一個(gè)高性能的數(shù)據(jù)庫系統(tǒng)。

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Mybatis 自定義類型處理器示例詳解

    Mybatis 自定義類型處理器示例詳解

    在某些情況下我們需要對(duì)類型做處理,例如數(shù)據(jù)存儲(chǔ)的是Long,程序里是BigDecimal,那么我們出庫入庫都需要做處理,此時(shí)就可以使用類型處理器,本文通過示例給大家介紹Mybatis 自定義類型處理器的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 詳解Java中如何定義和訪問靜態(tài)字段和方法

    詳解Java中如何定義和訪問靜態(tài)字段和方法

    在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,我們通常使用類來創(chuàng)建對(duì)象,類中有許多成員變量和方法,它們是直接屬于對(duì)象實(shí)例的,與之對(duì)應(yīng)的還有一類成員,那就是靜態(tài)成員,本文就來和大家聊聊Java是如何定義訪問靜態(tài)成員的吧
    2023-05-05
  • 基于html5+java實(shí)現(xiàn)大文件上傳實(shí)例代碼

    基于html5+java實(shí)現(xiàn)大文件上傳實(shí)例代碼

    本文通過一段實(shí)例代碼給大家介紹基于html5+java實(shí)現(xiàn)大文件上傳,涉及到html5 java 文件上傳相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • java關(guān)于String.split("|")的使用方式

    java關(guān)于String.split("|")的使用方式

    這篇文章主要介紹了java關(guān)于String.split("|")的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 使用@Value注解從配置文件中讀取數(shù)組

    使用@Value注解從配置文件中讀取數(shù)組

    這篇文章主要介紹了使用@Value注解從配置文件中讀取數(shù)組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring中@Scheduled注解的參數(shù)詳解

    Spring中@Scheduled注解的參數(shù)詳解

    這篇文章主要介紹了Spring中@Scheduled注解的參數(shù)詳解,@Scheduled注解的使用這里不詳細(xì)說明,@Scheduled注解有幾個(gè)參數(shù)需要說明一下,直接對(duì)8個(gè)參數(shù)進(jìn)行講解,需要的朋友可以參考下
    2023-11-11
  • MyBatis中的接口代理機(jī)制及其使用方式

    MyBatis中的接口代理機(jī)制及其使用方式

    這篇文章主要介紹了MyBatis中的接口代理機(jī)制及其使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • springboot跨域問題解決方案

    springboot跨域問題解決方案

    這篇文章主要介紹了springboot跨域問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • java反射深入剖析(推薦)

    java反射深入剖析(推薦)

    下面小編就為大家?guī)硪黄猨ava反射深入剖析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • 一文讀懂a(chǎn)va中的Volatile關(guān)鍵字使用

    一文讀懂a(chǎn)va中的Volatile關(guān)鍵字使用

    volatile關(guān)鍵字的作用保證了變量的可見性(visibility)。被volatile關(guān)鍵字修飾的變量,如果值發(fā)生了變更,其他線程立馬可見,避免出現(xiàn)臟讀的現(xiàn)象。這篇文章主要介紹了ava中的Volatile關(guān)鍵字使用,需要的朋友可以參考下
    2020-03-03

最新評(píng)論