人妻系列无码专区av在线,国内精品久久久久久婷婷,久草视频在线播放,精品国产线拍大陆久久尤物

當前位置:首頁 > 開發(fā)語言 > 正文

mysql優(yōu)化配置?mysql優(yōu)化參數(shù)詳解

mysql優(yōu)化配置?mysql優(yōu)化參數(shù)詳解

大家好,關(guān)于mysql優(yōu)化配置很多朋友都還不太明白,不過沒關(guān)系,因為今天小編就來為大家分享關(guān)于mysql優(yōu)化參數(shù)詳解的知識點,相信應(yīng)該可以解決大家的一些困惑和問題,如果...

大家好,關(guān)于mysql優(yōu)化配置很多朋友都還不太明白,不過沒關(guān)系,因為今天小編就來為大家分享關(guān)于mysql優(yōu)化參數(shù)詳解的知識點,相信應(yīng)該可以解決大家的一些困惑和問題,如果碰巧可以解決您的問題,還望關(guān)注下本站哦,希望對各位有所幫助!

SQL數(shù)據(jù)庫如何優(yōu)化

之前在BAT里參與過一個公司級應(yīng)用(非市場級,投入的人力也不會那么大),上線2年后,總是被用戶投訴,原因是這個應(yīng)用使用MySql數(shù)據(jù)庫來做持久層,但是2年了,有一張非常重要的存儲歷史任務(wù)的表實在是太大了,導致通過頁面想要查詢歷史數(shù)據(jù)的速度變得非常非常慢,所以用戶很是不滿意。

分析下來,這不是用Redis能解決的緩存問題,而是歷史數(shù)據(jù)的查詢響應(yīng)速度問題。

我們最開始是希望能夠通過增加索引的方式解決,但是面對千萬級別的數(shù)據(jù)量,我們也不敢貿(mào)然加索引,因為一旦數(shù)據(jù)庫hang住,期間的所有數(shù)據(jù)庫寫入請求都會被放到等待隊列中,如果請求是通過http請求發(fā)過來的,很有可能導致服務(wù)發(fā)生分鐘級別的超時不響應(yīng)。

雖然經(jīng)常被用戶投訴反應(yīng)慢,也不能破罐破摔,直接超時不響應(yīng)了吧。

于是我們陷入了兩難的境地。

后來我們分了兩個部分來優(yōu)化持久層。

MySQL的主從配置

第一步就是配置MySQL的主從庫,通過將讀寫請求分離,來提高數(shù)據(jù)庫的響應(yīng)速度。

從上圖可知,來自同一臺服務(wù)器的請求,經(jīng)過MySQL-proxy被分流給了不同的MySQL節(jié)點,其中寫請求給了主節(jié)點,讀請求給了從節(jié)點。因此,我們首先通過分流的方式,減輕了單節(jié)點MySQL的響應(yīng)壓力,實現(xiàn)了優(yōu)化的第一步。

引入ElasticSearch

但是,只配置MySQL的主從是遠遠不夠的。

通過查閱論壇,相關(guān)資料,我們最終敲定在持久層引入ElasticSearch。

ElasticSearch是一個輕量級的持久層工具,它支持動態(tài)多節(jié)點部署,自動備份,節(jié)點掉線后能夠自動切換主從,動態(tài)廣播發(fā)現(xiàn)新上線的節(jié)點,而這些優(yōu)點的應(yīng)用,無須修改任何server端配置??梢赃@樣理解,如果你部署了4個elasticsearch節(jié)點,其中2個掉了,服務(wù)器還是可以很好的繼續(xù)運行。

此外,它還有一個最重要的優(yōu)勢,那就是支持大數(shù)據(jù)快速查詢。一張幾千萬的表,如果用MySQL查詢,可能需要幾秒到幾十秒不等,但是如果用elasticsearch,只需要毫秒級別就能查詢到結(jié)果。完美的解決了我們當前的問題,還順帶幫我們鞏固了持久層的穩(wěn)定性問題。

綜上,優(yōu)化Mysql的目的是為持久層服務(wù),除了引入主從配置,當MySQL自身局限性導致無法繼續(xù)優(yōu)化后,引入其他技術(shù)也是十分必要的。

如果你對這篇回答有任何問題,歡迎在下方點贊,留言。

我是蘇蘇思量,來自BAT的java開發(fā)工程師,頭像是本人,每天都會分享科技類見聞,歡迎關(guān)注我,與我共同進步。

mysql數(shù)據(jù)庫設(shè)計與優(yōu)化,應(yīng)不應(yīng)該使用約束

首先使用約束可以確保表數(shù)據(jù)的準確完整和唯一性;

其中常見的約束有

PRIMARYKEY,DEFAULT,UNIQUE,FOREIGNKEY,NOTNULL

一般情況下:DEFAULT和NOTNULL是會限制的,可以確保數(shù)據(jù)完整避免程序邏輯不夠嚴謹造成的系統(tǒng)異常。但也不是絕對的,如果是后期優(yōu)化還要考慮現(xiàn)有數(shù)據(jù)是否會造成沖突。

PRIMARYKEY在大對數(shù)情況下會設(shè)置作為業(yè)務(wù)數(shù)據(jù)的唯一標識符。但一些關(guān)系表一般可以不設(shè)置。有人說PRIMARYKEY必須自增,其實也未必。得就實際業(yè)務(wù)需求而定。

UNIQUE約束可以保證一列或者多列組合值都是唯一的??梢蕴嵘@一列的搜索效率。但同樣也得考慮歷史數(shù)據(jù)的情況。

當然以上情況只是經(jīng)驗之談,具體數(shù)據(jù)庫的優(yōu)化一定是根據(jù)實際的業(yè)務(wù)邏輯進行的??赡軟]有什么必須遵守不可違背的定律。

只要符合業(yè)務(wù)需求并且能夠提升業(yè)務(wù)效率,就是合理的設(shè)計。

如何優(yōu)化MySQL千萬級大表

概述

使用阿里云rdsforMySQL數(shù)據(jù)庫(就是MySQL5.6版本),有個用戶上網(wǎng)記錄表6個月的數(shù)據(jù)量近2000萬,保留最近一年的數(shù)據(jù)量達到4000萬,查詢速度極慢,日??ㄋ?,嚴重影響業(yè)務(wù)。

老系統(tǒng),當時設(shè)計系統(tǒng)的人大概是大學沒畢業(yè),表設(shè)計和SQL語句寫的不僅僅是垃圾,簡直無法直視。原開發(fā)人員都已離職,到我來維護,這就是傳說中的維護不了就跑路,然后我就是掉坑的那個?。。?/p>

方案概述

方案一:優(yōu)化現(xiàn)有MySQL數(shù)據(jù)庫。優(yōu)點:不影響現(xiàn)有業(yè)務(wù),源程序不需要修改代碼,成本最低。缺點:有優(yōu)化瓶頸,數(shù)據(jù)量過億就玩完了。

方案二:升級數(shù)據(jù)庫類型,換一種100%兼容MySQL的數(shù)據(jù)庫。優(yōu)點:不影響現(xiàn)有業(yè)務(wù),源程序不需要修改代碼,你幾乎不需要做任何操作就能提升數(shù)據(jù)庫性能,缺點:多花錢。

方案三:一步到位,大數(shù)據(jù)解決方案,更換newSQL/noSQL數(shù)據(jù)庫。優(yōu)點:沒有數(shù)據(jù)容量瓶頸,缺點:需要修改源程序代碼,影響業(yè)務(wù),總成本最高。

優(yōu)化現(xiàn)有MySQL數(shù)據(jù)庫數(shù)據(jù)庫設(shè)計

表字段避免null值出現(xiàn),null值很難查詢優(yōu)化且占用額外的索引空間,推薦默認數(shù)字0代替null。

盡量使用INT而非BIGINT,如果非負則加上UNSIGNED(這樣數(shù)值容量會擴大一倍),當然能使用TINYINT、SMALLINT、MEDIUM_INT更好。

盡量使用TIMESTAMP而非DATETIME。

單表不要有太多字段,建議在20以內(nèi)。

用整型來存IP。

索引并不是越多越好,要根據(jù)查詢有針對性的創(chuàng)建,考慮在WHERE和ORDERBY命令上涉及的列建立索引,可根據(jù)EXPLAIN來查看是否用了索引還是全表掃描。

應(yīng)盡量避免在WHERE子句中對字段進行NULL值判斷,否則將導致引擎放棄使用索引而進行全表掃描。

值分布很稀少的字段不適合建索引,例如"性別"這種只有兩三個值的字段。

字符字段最好不要做主鍵。

不用外鍵,由程序保證約束。

盡量不用UNIQUE,由程序保證約束。

使用多列索引時注意順序和查詢條件保持一致,同時刪除不必要的單列索引。

使用可存下數(shù)據(jù)的最小的數(shù)據(jù)類型,整型<date,time<char,varchar<blob*

使用簡單的數(shù)據(jù)類型,整型比字符處理開銷更小,因為字符串的比較更復雜。如,int類型存儲時間類型,bigint類型轉(zhuǎn)ip函數(shù)。

使用合理的字段屬性長度,固定長度的表會更快。使用enum、char而不是varchar。

盡可能使用notnull定義字段。

盡量少用text,非用不可最好分表。

查詢頻繁的列,在where,groupby,orderby,on從句中出現(xiàn)的列。

where條件中<,<=,=,>,>=,between,in,以及l(fā)ike字符串+通配符(%)出現(xiàn)的列。

長度小的列,索引字段越小越好,因為數(shù)據(jù)庫的存儲單位是頁,一頁中能存下的數(shù)據(jù)越多越好。

離散度大(不同的值多)的列,放在聯(lián)合索引前面。查看離散度,通過統(tǒng)計不同的列值來實現(xiàn),count越大,離散程度越高。

SQL編寫

使用limit對查詢結(jié)果的記錄進行限定。

避免select*,將需要查找的字段列出來。

使用連接(join)來代替子查詢。

拆分大的delete或insert語句。

可通過開啟慢查詢?nèi)罩緛碚页鲚^慢的SQL。

不做列運算:SELECTidWHEREage+1=10,任何對列的操作都將導致表掃描,它包括數(shù)據(jù)庫教程函數(shù)、計算表達式等等,查詢時要盡可能將操作移至等號右邊。

SQL語句盡可能簡單:一條SQL只能在一個cpu運算;大語句拆小語句,減少鎖時間;一條大SQL可以堵死整個庫。

OR改寫成IN:OR的效率是n級別,IN的效率是log(n)級別,in的個數(shù)建議控制在200以內(nèi)。

不用函數(shù)和觸發(fā)器,在應(yīng)用程序?qū)崿F(xiàn)。

避免%xxx式查詢。

少用JOIN。

使用同類型進行比較,比如用'123'和'123'比,123和123比。

盡量避免在WHERE子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。

對于連續(xù)數(shù)值,使用BETWEEN不用IN:SELECTidFROMtWHEREnumBETWEEN1AND5。

列表數(shù)據(jù)不要拿全表,要使用LIMIT來分頁,每頁數(shù)量也不要太大。

分區(qū)

分區(qū)表的數(shù)據(jù)更容易維護,可以通過清楚整個分區(qū)批量刪除大量數(shù)據(jù),也可以增加新的分區(qū)來支持新插入的數(shù)據(jù)。另外,還可以對一個獨立分區(qū)進行優(yōu)化、檢查、修復等操作。

部分查詢能夠從查詢條件確定只落在少數(shù)分區(qū)上,速度會很快。

分區(qū)表的數(shù)據(jù)還可以分布在不同的物理設(shè)備上,從而搞笑利用多個硬件設(shè)備。

可以使用分區(qū)表賴避免某些特殊瓶頸,例如InnoDB單個索引的互斥訪問、ext3文件系統(tǒng)的inode鎖競爭。

可以備份和恢復單個分區(qū)。

一個表最多只能有1024個分區(qū)。

如果分區(qū)字段中有主鍵或者唯一索引的列,那么所有主鍵列和唯一索引列都必須包含進來。NULL值會使分區(qū)過濾無效。

所有分區(qū)必須使用相同的存儲引擎。

分表

分表就是把一張大表,按照如上過程都優(yōu)化了,還是查詢卡死,那就把這個表分成多張表,把一次查詢分成多次查詢,然后把結(jié)果組合返回給用戶。

分表分為垂直拆分和水平拆分,通常以某個字段做拆分項。比如以id字段拆分為100張表:表名為tableName_id%100。

但:分表需要修改源程序代碼,會給開發(fā)帶來大量工作,極大的增加了開發(fā)成本,故:只適合在開發(fā)初期就考慮到了大量數(shù)據(jù)存在,做好了分表處理,不適合應(yīng)用上線了再做修改,成本太高!??!而且選擇這個方案,都不如選擇我提供的第二第三個方案的成本低!故不建議采用。

分庫升級數(shù)據(jù)庫

開源數(shù)據(jù)庫會帶來大量的運維成本且其工業(yè)品質(zhì)和MySQL尚有差距,有很多坑要踩,如果你公司要求必須自建數(shù)據(jù)庫,那么選擇該類型產(chǎn)品。如tiDBpingcap/tidb,CubridOpenSourceDatabaseWithEnterpriseFeatures。

阿里云POLARDB,POLARDB是阿里云自研的下一代關(guān)系型分布式云原生數(shù)據(jù)庫,100%兼容MySQL,存儲容量最高可達100T,性能最高提升至MySQL的6倍。POLARDB既融合了商業(yè)數(shù)據(jù)庫穩(wěn)定、可靠、高性能的特征,又具有開源數(shù)據(jù)庫簡單、可擴展、持續(xù)迭代的優(yōu)勢,而成本只需商用數(shù)據(jù)庫的1/10。

阿里云OcenanBase,淘寶使用的,扛得住雙十一,性能卓著,但是在公測中,我無法嘗試,但值得期待。

阿里云HybridDBforMySQL(原PetaData),云數(shù)據(jù)庫HybridDBforMySQL(原名PetaData)是同時支持海量數(shù)據(jù)在線事務(wù)(OLTP)和在線分析(OLAP)的HTAP(HybridTransaction/AnalyticalProcessing)關(guān)系型數(shù)據(jù)庫。

騰訊云DCDB,DCDB又名TDSQL,一種兼容MySQL協(xié)議和語法,支持自動水平拆分的高性能分布式數(shù)據(jù)庫——即業(yè)務(wù)顯示為完整的邏輯表,數(shù)據(jù)卻均勻的拆分到多個分片中;每個分片默認采用主備架構(gòu),提供災(zāi)備、恢復、監(jiān)控、不停機擴容等全套解決方案,適用于TB或PB級的海量數(shù)據(jù)場景。

hadoop家族。hbase/hive懟上就是了。但是有很高的運維成本,一般公司是玩不起的,沒十萬投入是不會有很好的產(chǎn)出的!

我選擇了阿里云的MaxCompute配合DataWorks,使用超級舒服,按量付費,成本極低。

MaxCompute可以理解為開源的Hive,提供SQL/mapreduce/ai算法/python腳本/shell腳本等方式操作數(shù)據(jù),數(shù)據(jù)以表格的形式展現(xiàn),以分布式方式存儲,采用定時任務(wù)和批處理的方式處理數(shù)據(jù)。DataWorks提供了一種工作流的方式管理你的數(shù)據(jù)處理任務(wù)和調(diào)度監(jiān)控。

當然你也可以選擇阿里云hbase等其他產(chǎn)品,我這里主要是離線處理,故選擇MaxCompute,基本都是圖形界面操作,大概寫了300行SQL,費用不超過100塊錢就解決了數(shù)據(jù)處理問題。

如何在WordPress后臺直接優(yōu)化MySQL數(shù)據(jù)庫

使用數(shù)據(jù)庫優(yōu)化清理插件

MySQL實現(xiàn)批量插入以優(yōu)化性能的教程

開啟mysql事務(wù),打開MyBatis的DEBUG日志查看執(zhí)行的SQL,并打印DELETE返回的effectcount

好了,文章到這里就結(jié)束啦,如果本次分享的mysql優(yōu)化配置和mysql優(yōu)化參數(shù)詳解問題對您有所幫助,還望關(guān)注下本站哦!