資料庫基礎常用知識

2021-09-07 18:13:49 字數 1909 閱讀 9441

一,關聯式資料庫三大正規化

第一正規化要求每一列都不可再分,即要滿足原子性,這也是關聯式資料庫設計中最基本都要求。第二正規化是在它基礎上要求所有非主鍵列都要完全依賴主鍵列,而不能只依賴部分主鍵列(若有此情況,應該拆分表)。第三正規化是在第二正規化基礎上要求所有非主鍵列都必須要直接依賴主鍵列,而不是依賴某非主鍵列進而間接依賴主鍵列,比如使用者表有使用者id、使用者名稱、組織id、組織名稱欄位時就不滿足第三正規化,因為組織名稱是直接依賴組織id的。不過實際在關聯式資料庫表設計時為了減少關聯表查詢都會採用這種冗餘設計。

二、資料庫錶連間的連線關係

常見的資料庫表間連線關係分為內連線、外連線、左(右)外連線、交叉連線幾種。其中內連線返回兩個表中滿足條件的記錄,外連線(全外連線)返回兩個表中所有記錄(包括滿足條件的記錄,其它左邊表記錄+右邊表字段為空,其它右邊表記錄+左邊表字段為空),左外連線以左邊表為準,返回所有左邊表記錄(右邊表不存在關聯記錄的返回空),交叉連線是返回兩邊記錄的乘積。

三、資料庫索引概念及注意事項

資料庫索引目的是為了增加記錄的查詢排序效率,避免全表掃瞄提公升效率,尤其是在表資料多情況下,正確使用索引能極大提高資料庫的查詢效率。通常資料庫索引使用b+樹結構,其它類似常用的索引結構有hash索引、lsm樹索引。

從記錄順序與物理磁碟順序是否一致的角度看索引分為聚簇索引和非聚簇索引。聚簇索引是指索引記錄順序與物理記錄順序一致,查詢效率更高,更適用於區間記錄查詢,每個表只能建乙個聚簇索引,預設在建表主鍵時會把它設定為聚簇索引(如果要設定其它列為聚簇索引,要在指定主鍵前設定)。

常見索引分類有普通索引(常見的索引)、唯一索引(列值唯一的索引,允許空值)、主鍵索引(特殊的唯一索引)、單例索引、聯合索引。使用索引有以下注意事項:

避免過度使用索引,如果表記錄不多,或者是重覆記錄很多(比如性別列),或者表的增、改、刪很頻繁,不建議使用索引,因為索引效果不明顯還增加了維護成本。

合理使用索引,尤其是聯合索引,應將區分記錄更多、查詢條件在前的列放在聯合索引的前面,避免像mysql資料庫左聯合索引規則(假設聯合索引列為a、b、c時如果條件中沒有a列則不起作用,pgsql似乎沒這個問題)。

任何對列的操作都將導致表掃瞄,它包括資料庫函式、計算表示式等等,查詢時要盡可能將操作移至等號右邊。

in、or子句常會使用工作表,使索引失效;如果不產生大量重複值,可以考慮把子句拆開;拆開的子句中應該包含索引。

哪些情況需要建索引:

1 主鍵,唯一索引

2 經常用作查詢條件的字段需要建立索引

3 經常需要排序、分組和統計的字段需要建立索引

4 查詢中與其他表關聯的字段,外來鍵關係建立索引

哪些情況不要建索引:

1 表的記錄太少,百萬級以下的資料不需要建立索引

2 經常增刪改的表不需要建立索引

3 資料重複且分布平均的字段不需要建立索引,如 true,false 之類。

4 頻發更新的字段不適合建立索引

5 where條件裡用不到的字段不需要建立索引

索引的一些總結

mysql 索引優化分析

四、關聯式資料庫表中不應存的三類值

大檔案、聲音檔案,雖然資料庫欄位有blog型別,但最後還是不要直接將檔案存入資料庫,而是通過存入對應檔案路徑解決。因為通過資料庫操作速度不如直接操作檔案快,會增大資料庫檔案備份遷移資料麻煩。有網友表示在mysql資料庫中儲存檔案列,雖然在查詢中不含該字段也會拖慢查詢效率。

臨時資料,比如session、每小時、天會過期清理的資料不應該存在資料庫中,存在redis之類的快取中更合適。

大量日誌檔案,如果想將日誌存入資料庫以方便日誌的查詢最好也是單獨建立日誌庫,避免因為頻繁寫入日誌而影響主業務表的訪問效率。

資料庫常用知識總結

檢視當前mysql中所有的資料庫命令 show databases 使用某個資料庫 如 zhiliao use zhiliao 檢視資料庫的資訊 如 zhiliao show create database zhiliao 修改資料庫選項,如修改zhiliao這個資料庫的字元編碼 alter dat...

資料庫基礎知識

資料定義 定義基本表 create table 表名 列名 資料型別 列級完整性約束條件 列名 資料型別 列級完整性約束條件 表級完整性約束條件 後面用到的表 1 學生 表 student 由學號 sno 姓名 sname 性別 s 年齡 sage 所在系 sdept 5個屬性組成,可記為 stud...

資料庫 基礎知識

e r模型 實體 聯絡模型 entity relationship model,e r模型 實體是指現實中區別於其他物件的一種 物體 或一件 事情 例如一名學生,乙個專案等等。同乙個型別中所有的實體被叫做實體集,對應於資料庫的一張表,乙個實體則對應於一條記錄。不同的任務之間,就是通過聯絡關係整合到一...