Mysql1 晨考題
1.描述主鍵、外鍵、候選主鍵、超鍵分別是什么 ?
(1)主鍵:數據庫表中對存儲數據對象給予唯一完整標識的數據列或屬性的組合。一個數據列只能有一個主
鍵,且主鍵的取值不能缺失,即不能為空值(Null)。
(2)外鍵:在一個表中存在的另一個表的主鍵稱為此表的外鍵。
(3)候選主鍵:是最小超鍵,即沒有冗余元素的超鍵。
(4)超鍵:在關系中能唯一標識元素的屬性集稱為關系模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組
合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。
2.drop,delete 與 truncate 的區別 ?
(1)drop:用來刪除表。
(2)delete:用來刪除表中的數據。
(3)truncate:把表中的數據清空。
3.SQL 中的 UNION 和 UNION ALL 區別 ?
(1)union 去除重復數據,union all 不去除重復數據。
(2)union 將會按照字段的順序進行排序,而 union all 只是簡單的將兩個結果合并后就返回。
4.exists、in、any 和 all 的區別 ?
(1)exists 表示存在判斷,在使用 exists 的時候,如果子查詢返回的結果集為真,則主查詢返回結果。
(2)in 表示返回所有包含在 in 中的數據。
(3)any 表示滿足任意一個條件。
(4)all 表示滿足所有的條件。
5.SQL 語句的執行順序 ?
SQL 語句執行順序為:from—where—group by—having—select—order by—limit
6.count(*) 和 count(1) 和 count(id) 的區別 ?
(1)count(*) 表示查詢有多少行數據,null 值也計入其中。
(2)count(1) 表示統計表中所有的記錄數,null 值也計入其中。
(3)count(id) 表示根據 id 字段查詢有多少行數據,null 值不計人其中。
7.SQL 語句優化(不少于6條)?
(1)應盡量避免在 where 子句中使用 or 來連接條件。
(2)應盡量避免在 where 子句中對字段進行函數操作。
(3)應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描。
(4)任何地方都不要使用 select * ,用具體的字段列表代替 “*”,不要返回用不到的任何字段。
(5)盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,可以節省存儲空間。
(6)其次對于查詢來說,在一個相對較小的字段內搜索效率顯然要高些。
(7)盡量避免向客戶端返回大量數據,若數據量過大,應該考慮相應需求是否合理。
(8)盡量避免大事務操作,提高系統并發能力
8.SQL 常用的函數有哪些 ?
SQL 常用的函數有 sum、max、min、avg、count、day
9.SQL 中用于拼接字符串的語句是 ?
concat (str,…,strN)
10.左連接,右連接和內連接的區別 ?
(1)左連接:左表無條件完全顯示,右表滿足條件連接,不滿足條件的右表補 null 顯示。
(2)右連接:右表無條件完全顯示,左表滿足條件連接,不滿足條件的左表補 null 顯示。
(3)內連接:只有滿足條件的數據才會顯示。
1.什么是索引 ?
(1)索引是一種特殊的文件,包含著數據表里所有記錄的引用指針。
(2)索引是數據庫管理系統中一個用于排序的數據結構,能夠快速查詢和更新數據庫表中數據,索引的實現通常
使用 B 樹及其 B+ 樹。
2.索引的種類有哪些 ?區別是什么 ?
(1)主鍵索引:數據列不允許重復,不允許為 Null ,一個表中只能有一個主鍵。
(2)唯一索引:數據列不允許重復,允許為 Null ,一個表中允許多個列創建唯一索引。
(3)普通索引: 基本的索引類型,沒有唯一性的限制,允許為 Null。
(4)全文索引:主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較。
3.描述索引的優缺點 ?
(1)優點:可以大大加快數據的檢索速度,通過使用索引可以在查詢的過程中,使用優化隱藏器提高系統的性
能。
(2)缺點:創建和維護索引需要耗費時間,當對表中的數據進行操作時,會降低增刪改查的執行效率,索引需要
占用物理空間。
4.設計索引的原則 ?(不少于4條)
(1)如果對字符串列進行索引,應該指定一個前綴長度。
(2)利用最左前綴 。
(3)不要過度使用索引。
(4)對于經常查詢的字段建議創建索引。
(5)不要在區分度低的字段中使用索引。
5.什么情況下索引會失效 ?(不少于4條)
(1)條件中有 or。
(2)以 % 開頭的 like 查詢。
(3)where 子句中使用操作符。
(4)where 子句中對字段進行函數操作。
6.數據庫優化方案 ?(至少3條)
(1)將含有字段的表進行分表。
(2)建立合理索引。
(3)增加中間表。
(4)使用緩存。
(5)保留冗余字段。