{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

數據庫訪問量很大時,如何做優化?

DTeamDTeam 回答0 收藏1
收藏問題

3條回答

cloud

cloud

回答于2022-06-28 14:43

你好!如果有大量的訪問用到調取到數據庫時,往往查詢速度會變得很慢,所以我們需要進行優化處理。

優化從三個方面考慮:

SQL語句優化、

主從復制,讀寫分離,負載均衡、

數據庫分庫分表。


一、SQL查詢語句優化

1、使用索引

建立索引可以使查詢速度得到提升,我們首先應該考慮在where及order by,group by涉及的列上建立索引。

2、借助explain(查詢優化神器)選擇更好的索引和優化查詢語句

SQL 的 Explain 通過圖形化或基于文本的方式詳細說明了 SQL 語句的每個部分是如何執行以及何時執行的,以及執行效果。通過對選擇更好的索引列,或者對耗時久的SQL語句進行優化達到對查詢速度的優化。

3、任何地方都不要使用SELECT * FROM語句。

4、不要在索引列做運算或者使用函數

5、查詢盡可能使用limit來減少返回的行數

6、使用查詢緩存,并將盡量多的內存分配給MYSQL做緩存



二、主從復制,讀寫分離,負載均衡

目前大多數的主流關系型數據庫都提供了主從復制的功能,通過配置兩臺(或多臺)數據庫的主從關系,可以將一臺數據庫服務器的數據更新同步到另一臺服務器上。網站可以利用數據庫這一功能,實現數據庫的讀寫分離,從而改善數據庫的負載壓力。一個系統的讀操作遠遠多于寫操作,因此寫操作發向master,讀操作發向slaves進行操作(簡單的輪詢算法來決定使用哪個slave)。

利用數據庫的讀寫分離,Web服務器在寫數據的時候,訪問主數據庫(master),主數據庫通過主從復制將數據更新同步到從數據庫(slave),這樣當Web服務器讀數據的時候,就可以通過從數據庫獲得數據。這一方案使得在大量讀操作的Web應用可以輕松地讀取數據,而主數據庫也只會承受少量的寫入操作,還可以實現數據熱備份,可謂是一舉兩得。



三、數據庫分表、分區、分庫

1、分表

通過分表可以提高表的訪問效率。有兩種拆分方法:

垂直拆分

在主鍵和一些列放在一個表中,然后把主鍵和另外的列放在另一個表中。如果一個表中某些列常用,而另外一些不常用,則可以采用垂直拆分。

水平拆分

根據一列或者多列數據的值把數據行放到兩個獨立的表中。

2、分區

分區就是把一張表的數據分成多個區塊,這些區塊可以在一個磁盤上,也可以在不同的磁盤上,分區后,表面上還是一張表,但是數據散列在多個位置,這樣一來,多塊硬盤同時處理不同的請求,從而提高磁盤I/O讀寫性能。實現比較簡單,包括水平分區和垂直分區。

3、分庫

分庫是根據業務不同把相關的表切分到不同的數據庫中,比如web、bbs、blog等庫。

分庫解決的是數據庫端 并發量的問題。分庫和分表并不一定兩個都要上,比如數據量很大,但是訪問的用戶很少,我們就可以只使用分表不使用分庫。如果數據量只有1萬,而訪問用戶有一千,那就只使用分庫。

注意:分庫分表最難解決的問題是統計,還有跨表的連接(比如這個表的訂單在另外一張表),解決這個的方法就是使用中間件,比如大名鼎鼎的MyCat,用它來做路由,管理整個分庫分表,乃至跨庫跨表的連接

評論0 贊同0
  •  加載中...
superPershing

superPershing

回答于2022-06-28 14:43

如果有一個特別大的訪問量到數據庫上時,往往查詢速度會變得很慢,所以我們需要進行優化。優化從三個方面考慮:SQL語句優化、主從復制,讀寫分離,負載均衡、數據庫分庫分表。

一、SQL查詢語句優化

1、使用索引

建立索引可以使查詢速度得到提升,我們首先應該考慮在where及order by,group by涉及的列上建立索引。

2、借助explain(查詢優化神器)選擇更好的索引和優化查詢語句

SQL 的 Explain 通過圖形化或基于文本的方式詳細說明了 SQL 語句的每個部分是如何執行以及何時執行的,以及執行效果。通過

對選擇更好的索引列,或者對耗時久的SQL語句進行優化達到對查詢速度的優化。

3、任何地方都不要使用SELECT * FROM語句。

4、不要在索引列做運算或者使用函數

5、查詢盡可能使用limit來減少返回的行數

6、使用查詢緩存,并將盡量多的內存分配給MYSQL做緩存

二、主從復制,讀寫分離,負載均衡

目前大多數的主流關系型數據庫都提供了主從復制的功能,通過配置兩臺(或多臺)數據庫的主從關系,可以將一臺數據庫服務器的數據更新同步到另一臺服務器上。網站可以利用數據庫這一功能,實現數據庫的讀寫分離,從而改善數據庫的負載壓力。一個系統的讀操作遠遠多于寫操作,因此寫操作發向master,讀操作發向slaves進行操作(簡單的輪詢算法來決定使用哪個slave)。

利用數據庫的讀寫分離,Web服務器在寫數據的時候,訪問主數據庫(master),主數據庫通過主從復制將數據更新同步到從數據庫(slave),這樣當Web服務器讀數據的時候,就可以通過從數據庫獲得數據。這一方案使得在大量讀操作的Web應用可以輕松地讀取數據,而主數據庫也只會承受少量的寫入操作,還可以實現數據熱備份,可謂是一舉兩得。

三、數據庫分表、分區、分庫

1、分表

通過分表可以提高表的訪問效率。有兩種拆分方法:

垂直拆分

在主鍵和一些列放在一個表中,然后把主鍵和另外的列放在另一個表中。如果一個表中某些列常用,而另外一些不常用,則可以采用垂直拆分。

水平拆分

根據一列或者多列數據的值把數據行放到兩個獨立的表中。

2、分區

分區就是把一張表的數據分成多個區塊,這些區塊可以在一個磁盤上,也可以在不同的磁盤上,分區后,表面上還是一張表,但是數據散列在多個位置,這樣一來,多塊硬盤同時處理不同的請求,從而提高磁盤I/O讀寫性能。實現比較簡單,包括水平分區和垂直分區。

3、分庫

分庫是根據業務不同把相關的表切分到不同的數據庫中,比如web、bbs、blog等庫。

分庫解決的是數據庫端 并發量的問題。分庫和分表并不一定兩個都要上,比如數據量很大,但是訪問的用戶很少,我們就可以只使用分表不使用分庫。如果數據量只有1萬,而訪問用戶有一千,那就只使用分庫。

注意:分庫分表最難解決的問題是統計,還有跨表的連接(比如這個表的訂單在另外一張表),解決這個的方法就是使用中間件,比如大名鼎鼎的MyCat,用它來做路由,管理整個分庫分表,乃至跨庫跨表的連接(Java自學網【javazx.com】推薦)

評論0 贊同0
  •  加載中...
bingo

bingo

回答于2022-06-28 14:43

當數據量很大的時候,主要從以下幾點入手。

索引:

任何時候創建索引都是第一選擇,當數據量很大嗯時候,有沒有索引的查詢速度可以說是指數級別的差距,通過索引可以大幅度提升檢索效率。

分表:

當數據量非常大的時候,索引可能已經不起作用了,這個時候我們就需要對數據分表存儲,可以水平分表和垂直分表,通過分表,一個表的數據量變少了,就是復雜問題簡單處理,細分處理。

分布式:

一個數據庫的數據量過大的時候,我們可以考慮部署多個數據庫,這樣每個數據庫的數據量相對來說減少了。

緩存:

對熱數據進行緩存,28定律存在于整個宇宙中,經常檢索的數據一定是少部分數據,我們緩存它們,可以大大提升數據庫查詢效率。

評論0 贊同0
  •  加載中...

相關問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<