在生活中常見的數據庫應用程序中,您一定會遇到其他更多的數據庫系統。盡管我們今天已經習慣了這些應用程序,但是數據庫系統實際上是一項非常復雜的技術,已經開發了60多年。那么哪些數據庫是行存儲?關系型數據庫的性能優化技巧有哪些?下文將介紹行存儲的數據庫以及關系型數據庫的性能的10個優化技巧,希望可以幫助到有需求的人。
哪些數據庫是行存儲?
大多數數據庫系統存儲一組數據記錄,這些記錄由表中的列和行組成。字段是列和行的交集:某種類型的單個值。
屬于同一列的字段通常具有相同的數據類型。例如,如果我們定義了一個包含用戶數據的表,那么所有的用戶名都將是相同的類型,并且屬于同一列。在邏輯上屬于同一數據記錄(通常由鍵標識)的值的集合構成一行。
對數據庫進行分類的方法之一是按數據在磁盤上的存儲方式進行分類:按行或按列進行分類。表可以水平分區(將屬于同一行的值存儲在一起),也可以垂直分區(將屬于同一列的值存儲在一起)。
面向行的數據庫的例子很多:MySQL、PostgreSQL和大多數傳統的關系數據庫。而兩個開源的、面向列數據存儲的先驅則是MonetDB和C-Store(C-Store是Vertica的開源前身)。
關系型數據庫的性能優化技巧有哪些?
1、 把數據、日志、索引放到不同的I/O設備上,增加讀取速度。數據量(尺寸)越大,提高I/O越重要。
2、 縱向、橫向分割表,減少表的尺寸,如:可以把大數據量的字段拆分表。
3、 根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,盡量使用字節數小的列建索引,不要對有限的幾個值的列建單一索引。
4、 用OR的字句可以分解成多個查詢,并且通過UNION鏈接多個查詢。它們的速度只與是否使用索引有關,如果查詢需要用到聯合索引,用UNION all執行的效率更高。
5、 在查詢SELECT語句中用WHERE子句限制返回的行數,避免表掃描。如果返回不必要的數據,則浪費了服務器的I/O資源,加重了網絡的負擔,降低了性能。如果表很大,在表掃描期間將表鎖住,禁止其他的聯結訪問表,后果很嚴重。
6、 注意使用DISTINCT,在沒有必要時不要用,它同UNION一樣會使查詢變慢。
7、 在IN后面值的列表中,將出現最頻繁的值放在最前面,出現最少的放在最后面,減少判斷的次數。
8、 一般在GROUP BY和HAVING子句之前就能剔除多余的行,所以盡量不要用它們來做剔除行的工作,也就是說盡可能在WHERE中過濾數據。
9、 盡量將數據的處理工作放在服務器上,減少網絡的開銷,如使用存儲過程。存儲過程是編譯、優化過,并且被組織到一個執行規劃里,且存儲在數據庫中的SQL語句(存儲過程是數據庫服務器端的一段程序),是控制流語言的集合,速度當然快。
10、 不要在一句話里再三地使用相同的函數,浪費資源,將結果放在變量里再調用更快。
11、 針對大量只讀查詢操作進行優化的方法:
1). 數據量小的數據,可以考慮不存儲在數據庫中,而是通過程序常量的方式解決。
2). 需要存儲在數據庫中的數據,可以考慮采用物化視圖(索引視圖)。當DBA在視圖上創建索引時,這個視圖就被物化(執行)了,并且結果集被永久地保存在唯一索引中,保存方式與一個有聚簇索引的表的保存方式相同。物化視圖減除了為引用視圖的查詢動態建立結果集的開銷,優化人員可以在查詢中使用視圖索引,而不需要在FROM子句中直接指定視圖。
3). 數據存儲時可以考慮適當的數據冗余,以減少數據庫表之間的鏈接操作,提高查詢效率。
4) 針對數據的特點,采取特定的索引類型。例如,位圖索引等。
上述就是關于哪些數據庫是行存儲,以及關系型數據庫的性能優化技巧有哪些的全部內容介紹,想了解更多關于數據庫的信息,請繼續關注中培偉業。