回覆列表
  • 1 # 貓哥視界

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

    最佳化從三個方面考慮:

    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,用它來做路由,管理整個分庫分表,乃至跨庫跨表的連線

  • 2 # 夢迴故里歸來

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

    索引:

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

    分表:

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

    分散式:

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

    快取:

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

  • 3 # Java架構達人

    如果有一個特別大的訪問量到資料庫上時,往往查詢速度會變得很慢,所以我們需要進行最佳化。最佳化從三個方面考慮: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】推薦)

  • 中秋節和大豐收的關聯?
  • 戈爾什科夫對前蘇海軍的發展有何促進作用?