資料庫結構的優化有多種方法,主要的有兩種:
一是利用儲存過程來代替常用的sql查詢語句,減少sql語句解析編譯的過程。
另一種是使用資料庫管理系統中的分割槽表方法進。
使用儲存過程的優化方法有執行速度快的優點,但是其本身不利於除錯、沒有辦法使用資料庫快取機制等缺點,所以在系統安全性和效能要求更高的情況下,建議使用分割槽表的方法。但要注意:並不是只要資料量夠多就需要通過資料庫分割槽表來提高查詢效率,而是要在資料是分段的前提下,我們才需要考慮到是否需要使用分割槽表。
分割槽的好處:
1) 增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用;
2) 維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;
3) 均衡i/o:可以把不同的分割槽對映到磁碟以平衡i/o,改善整個系統效能;
4) 改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。
資料庫的表分割槽有兩種方式,水平表分割槽和垂直表分割槽。
水平分割槽:目的是將乙個表分為多個表。每個表包含的列數(表字段)都是相同的,但是記錄數(資料行)會減少。比如,我們可以將乙個包含1億行記錄的資料庫表,按照水平分割槽的方式,分成12個小表,每個小表分別表示這一年份內從1月到12月的資料。這樣,任何需要查詢特定月份資料的查詢只需查詢相應月份的表,而避免從儲存在1個大表中的所有月份的資料進行查詢。根據sql語句的執行效率,毫無疑問,從小表中的查詢效率會遠遠高於從大表中查詢的效率。
垂直分割槽:該方式則與水平分割槽方式相反,從縱向進行分割槽,是將乙個原始表分成多個只包含較少列的表。在日常的應用中,水平分割槽可以說是最常用的分割槽方式。
庫表分離和讀寫分離
讀寫分離,基本的原理是讓主資料庫處理事務性增、改、刪操作(insert、update、delete),而從資料庫處理select查詢操作。資料庫複製被用來把事務性操作導致的變更同步到集群中的從資料庫。
為什麼要分庫、分表、讀寫分?
單錶的資料量限制,當單錶資料量到一定條數之後資料庫效能會顯著下降。資料多了之後,對資料庫的讀、寫就會很多。分庫減少單台資料庫的壓力。接觸過幾個分庫分表的系統,都是通過主鍵進行雜湊分褲分表的。這類資料比較特殊,主鍵就是唯一的獲取該條資訊的主要途徑。比如:京東的訂單、財付通的交易記錄等。。。該類資料的用法,就是通過訂單號、交易號來查詢該筆訂單、交易。
還有一類資料,比如使用者資訊,每個使用者都有系統內部的乙個userid,與userid對應的還有使用者看到的登入名。那麼如果分庫分表的時候單純通過userid進行雜湊分庫,那麼根據登入名來獲取使用者的資訊,就無法知道該使用者處於哪個資料庫中。
或許有朋友會說,我們可以維護乙個email----userid的對映關係,根據email先查找到userid,在根據userid的分庫分表規則到對應庫的對應表來獲取使用者的記錄資訊。這麼做是可以的,但是這個對映關係的條數本身也是個瓶頸,原則上是沒有減少單錶內資料的條數,算是乙個單點。並且要維護這個對映關係和使用者資訊的一致性(修改登入名、多登入名等其他特殊需求),最大乙個原因,其實使用者資訊是乙個讀大於寫的庫,web2.0都是以使用者為中心,所有資訊都和使用者資訊相關聯,所以對使用者資訊拆分還是有一定侷限性的。
對於這類讀大於寫並且資料量增加不是很明顯的資料庫,推薦採用讀寫分離+快取的模式,試想一下乙個使用者註冊、修改使用者資訊、記錄使用者登入時間、記錄使用者登入ip、修改登入密碼,這些是寫操作。但是以上這些操作次數都是很小的,所以整個資料庫的寫壓力是很小的。唯一乙個比較大的就是記錄使用者登入時間、記錄使用者登入ip這類資訊,只要把這些經常變動的資訊排除在外,那麼寫操作可以忽略不計。所以讀寫分離首要解決的就是經常變化的資料的拆分,比如:使用者登入時間、記錄使用者登入ip。這類資訊可以單獨獨立出來,記錄在持久化類的快取中(可靠性要求並不高,登陸時間、ip丟了就丟了,下次來了就又來了)
以oracle為例,主庫負責寫資料、讀資料。讀庫僅負責讀資料。每次有寫庫操作,同步更新cache,每次讀取先讀cache在讀db。寫庫就乙個,讀庫可以有多個,採用dataguard來負責主庫和多個讀庫的資料同步。
資料庫優化 資料庫設計優化
一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...
資料庫引擎優化顧問優化資料庫
現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...
資料庫優化
資料庫優化 1 合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是提高查詢效率。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引 在頻繁進行排序或分組 即進行groupby或orderby操作 的列上建立索引...