數據庫之概念
1.索引是什麽?作用和優缺點?
以MySQL為例:
索引就是加快檢索表中數據的方法,是幫助MySQL高效獲取數據的數據結構。
理解:數據庫的索引類似於書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數據庫中,索引也允許數據庫程序迅速地找到表中的數據,而不必掃描整個數據庫。
MySQL數據庫幾個基本的索引類型:普通索引、唯一索引、主鍵索引、全文索引
索引優點:
- 索引加快數據庫的檢索速度
- 唯一索引可以確保每一行數據的唯一性
- 通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的性能
缺點:
- 導致數據庫系統更新數據的性能下降,因為大部分數據更新需要同時更新索引。
- 索引需要占物理和數據空間
2.什麽是事務?
事務(Transaction)是並發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麽都執行,要麽都不執行,它是一個不可分割的工作單位。例如,銀行轉賬工作:從一個賬號扣款並使另一個賬號增款,這兩個操作要麽都執行,要麽都不執行。所以,應該把它們看成一個事務。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性。
為什麽會提出事務:事務的提出主要是為了解決並發情況下保持數據一致性的問題
事務4個基本特征:原子性,一致性,隔離性,持久性
數據庫的樂觀鎖和悲觀鎖是什麽?
數據庫管理系統(DBMS)中的並發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。
樂觀並發控制(樂觀鎖)和悲觀並發控制(悲觀鎖)是並發控制主要采用的技術手段。
- 悲觀鎖:假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作
- 樂觀鎖:假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
3.使用索引查詢一定能提高查詢的性能嗎?為什麽?
通常,通過索引查詢數據比全表掃描要快.但是我們也必須註意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:
- 基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%
- 基於非唯一性索引的檢索
4.簡單說一說drop、delete與truncate的區別:都表示刪除,但是三者有一些差別
- delete和truncate只刪除表的數據不刪除表的結構
- 速度一般來說: drop> truncate >delete
- delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.
- truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger
應用場景:
- 如果想刪除表,用drop;
- 想刪除部分數據行時候,用delete,並且帶上where子句;
- 如果想保留表而將所有數據刪除,如果和事務無關,用truncate即可;如果和事務有關,或者想觸發trigger,還是用delete;如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。(在沒有備份情況下,謹慎使用 drop 與 truncate)
5.超鍵,候選鍵,主鍵,外鍵分別是什麽?
超鍵:在關系中能唯一標識元組的屬性集。(一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵)
候選鍵:是最小超鍵,即沒有冗余元素的超鍵。
主鍵:數據庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。(一個數據列只能有一個主鍵,且主鍵的取值不能為空值Null)
外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵。
6.什麽是視圖?視圖的應用場景有哪些?
視圖是一種虛擬的表,具有和物理表相同的功能。視圖通常是有一個表或者多個表的行或列的子集,可以對視圖進行增,改,查的操作,對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。
數據庫之概念