mysql優(yōu)化100個(gè)技巧 數(shù)據(jù)庫(kù)訪問量很大時(shí),如何做優(yōu)化?
數(shù)據(jù)庫(kù)訪問量很大時(shí),如何做優(yōu)化?如果有一個(gè)最重要的大的訪問量到數(shù)據(jù)庫(kù)上時(shí),一般說來查詢速度會(huì)變得異常很慢,所以我們需要通過優(yōu)化。系統(tǒng)優(yōu)化從三個(gè)方面決定:SQL語(yǔ)句優(yōu)化軟件、主從復(fù)制,讀寫分離,負(fù)載均衡
數(shù)據(jù)庫(kù)訪問量很大時(shí),如何做優(yōu)化?
如果有一個(gè)最重要的大的訪問量到數(shù)據(jù)庫(kù)上時(shí),一般說來查詢速度會(huì)變得異常很慢,所以我們需要通過優(yōu)化。系統(tǒng)優(yōu)化從三個(gè)方面決定:SQL語(yǔ)句優(yōu)化軟件、主從復(fù)制,讀寫分離,負(fù)載均衡、數(shù)據(jù)庫(kù)分庫(kù)分表。
一、SQL查詢語(yǔ)句優(yōu)化
1、建議使用索引
成立索引可以不使網(wǎng)上查詢速度換取提升,我們必須肯定考慮在where及order by,group by不屬于的列上組建索引。
2、借助explain(網(wǎng)站查詢優(yōu)化系統(tǒng)神器)選擇好的索引和系統(tǒng)優(yōu)化查詢語(yǔ)句
SQL的Explain是從圖形化或基于組件文本的具體說明了SQL語(yǔ)句的每個(gè)部分是該如何執(zhí)行在內(nèi)何時(shí)負(fù)責(zé)執(zhí)行的,以及不能執(zhí)行效果。實(shí)際
對(duì)中,選擇更好的索引列,或者對(duì)工程浩大久的SQL語(yǔ)句通過優(yōu)化系統(tǒng)提升到對(duì)可以查詢速度的優(yōu)化。
3、任何地方都不要建議使用SELECT*returning語(yǔ)句。
4、別在索引列做運(yùn)算也可以不使用函數(shù)
5、網(wǎng)上查詢盡肯定使用limit來下降返回的行數(shù)
6、建議使用網(wǎng)站查詢緩存,并將不要多的內(nèi)存分配給MYSQL做緩存
二、主從復(fù)制,讀寫分離,負(fù)載均衡
目前大多數(shù)的主流關(guān)系型數(shù)據(jù)庫(kù)都可以提供了主從復(fù)制的功能,是從配置好不好兩臺(tái)(或多臺(tái))數(shù)據(jù)庫(kù)的主從關(guān)系,可以將一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)可以更新不同步的到另一臺(tái)服務(wù)器上。網(wǎng)站可以憑借數(shù)據(jù)庫(kù)這一功能,基于數(shù)據(jù)庫(kù)的讀寫再分離,最大限度地慢慢改善數(shù)據(jù)庫(kù)的負(fù)載壓力。一個(gè)系統(tǒng)的讀操作仍舊相較寫操作,因此寫你的操作發(fā)向master,讀操作發(fā)向slaves進(jìn)行操作(簡(jiǎn)單點(diǎn)輪詢算法來改變可以使用哪個(gè)slave)。
利用數(shù)據(jù)庫(kù)的讀寫分離,Web服務(wù)器在寫數(shù)據(jù)的時(shí)候,ftp連接主數(shù)據(jù)庫(kù)(master),主數(shù)據(jù)庫(kù)是從主從復(fù)制將數(shù)據(jù)更新完網(wǎng)絡(luò)同步到從數(shù)據(jù)庫(kù)(slave),這樣的話當(dāng)Web服務(wù)器讀數(shù)據(jù)的時(shí)候,就是可以是從從數(shù)據(jù)庫(kù)完成數(shù)據(jù)。這一方案也讓在大量讀能操作的Web應(yīng)用也可以隨意地讀取數(shù)據(jù),而主數(shù)據(jù)庫(kù)也只會(huì)無法承受少量的寫入文件能操作,還可以不實(shí)現(xiàn)程序數(shù)據(jù)熱備分,委實(shí)是一舉兩得。
三、數(shù)據(jù)庫(kù)分表、主分區(qū)、分庫(kù)
1、分表
通過分表這個(gè)可以提高表的訪問效率。有兩種word文檔合并方法:
垂線拆分
在主鍵和一些列放在旁邊一個(gè)表中,后再把主鍵和另外的列放在另一個(gè)表中。假如一個(gè)表中某些列正確,而另外一些不常用,則也可以常規(guī)互相垂直拆分。
水平拆分
依據(jù)一列或者多列數(shù)據(jù)的值把數(shù)據(jù)行扔到兩個(gè)單獨(dú)的的表中。
2、主分區(qū)
分區(qū)就是把一張表的數(shù)據(jù)四等分多個(gè)區(qū)塊,這些區(qū)塊也可以在一個(gè)磁盤上,也這個(gè)可以在相同的磁盤上,分區(qū)后,表面上我還是兩張表,但是數(shù)據(jù)散列在多個(gè)位置,這樣一來,多塊硬盤而全面處理有所不同的請(qǐng)求,進(jìn)而增加磁盤I/O讀寫性能?;诙己芎?jiǎn)單的,和水平分區(qū)和平行分區(qū)。
3、分庫(kù)
分庫(kù)是據(jù)業(yè)務(wù)相同把相關(guān)的表分割處理到有所不同的數(shù)據(jù)庫(kù)中,比如web、bbs、blog等庫(kù)。
分庫(kù)解決的是數(shù)據(jù)庫(kù)端并發(fā)量的問題。分庫(kù)和分表卻不是一定兩個(gè)都要上,諸如數(shù)據(jù)量比較大,不過不能訪問的用戶很少,我們就這個(gè)可以只在用分表不建議使用分庫(kù)。假如數(shù)據(jù)量唯有1萬,而不能訪問用戶有一千,那就只可以使用分庫(kù)。
盡量:分庫(kù)分表最難可以解決的問題是做統(tǒng)計(jì),還有跨表的連接(.例如這個(gè)表的訂單在另外一張表),幫忙解決這個(gè)的方法應(yīng)該是在用中間件,諸如如雷貫耳的MyCat,用它來做路由,管理整個(gè)分庫(kù)分表,乃至于跨庫(kù)跨表的連接(Java自學(xué)網(wǎng)【】幫我推薦)
ASP+mysql海量數(shù)據(jù)的分頁(yè)優(yōu)化?
要把connection設(shè)置為建議使用本地游標(biāo)定位,mysql的server端不意見recordset的recordcount屬性。connstr#34****
#34set(##34
)#39adUseClient3,而默認(rèn)為adUseServer(2)set(##34
)sql#34select.....#sql,conn,1,1#39這時(shí)候就這個(gè)可以用recordcountpagecount了(strpage)select__