SQL-基本學習II-數據庫引擎與索引


這是SQL的第二篇,結合一些被面試的內容,對常考的數據庫問題進行一些總結。

SQL語法編寫

重複數據的一組查詢
有一張person表,其中有p_id,p_name;一張house表,其中有h_id,address;一張hire表,其中有hh_id、h_id、p_id;hire記錄了租房者租房的記錄,一個租房客可以租多個房子。設計一條sql,查詢租了多個房子的租房者姓名。

select p_name,count(*)
from hire
INNER JOIN person on hire.p_id = person.p_id
group by hire.p_id having count(*)>1;

假設京東商品表jd_sku中,price字段表示價格,promote_price字段表示促銷時期的價格。請用一條SQL語句實現;當前月份爲6月份時,使用promote_price字段代替price字段

update jd_sku set promote_price = price
from jd_sku
where month = '6';

Mysql的數據引擎Innodb與Myisam的區別

事務支持、行鎖與表鎖、聚集索引與非聚集索引、全文索引

  • 1.組成部分:Myisam的索引和數據是分開的,並且索引是有壓縮的,而Innodb是索引和數據放在一起,且沒有使用壓縮,因而Innodb比MyISAM體積更大。MyISAM每張表都包括三種文件:表定義文件(.frm)、數據文件(.myd)和索引文件(.myi),而Innodb通常許多表保存在同一個文件中。
  • 2.Myisam沒事務而Innodb支持事務,支持事務的回滾。
  • 3.MySQL表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨佔寫鎖(Table Write Lock)。
    對MyISAM表進行讀操作時,它不會阻塞其他用戶對同一表的讀請求,但會阻塞對同一表的寫操作;而對MyISAM表的寫操作,則會阻塞其他用戶對同一表的讀和寫操作。
    InnoDB行鎖是通過給索引項加鎖來實現的,即只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則將使用表鎖!行級鎖在每次獲取鎖和釋放鎖的操作需要消耗比表鎖更多的資源。
    表級鎖,直接鎖定整張表,在你鎖定期間,其它進程無法對該表進行寫操作。如果你是寫鎖,則其它進程則讀也不允許
    行級鎖, 僅對指定的記錄進行加鎖,這樣其它進程還是可以對同一個表中的其它記錄進行操作。
  • 4.Myisam是非聚集索引,有專用的索引表而Innodb是聚集索引,根據物理存儲而建立的索引。
  • 5.Myisam支持全文索引而Innodb不支持全文索引。倒排文檔技術:建立一個詞出現的頻率和位置的庫。

關於索引

索引的優點

  • 1.通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
  • 2.可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
  • 3.可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

索引的缺點

  • 1.創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
  • 2.索引需要佔物理空間,除了數據表佔數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
  • 3.當對錶中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

索引的實現原理 B樹與B+樹

在瞭解B樹與B+樹之前,先來解釋一下平衡二叉樹:
平衡二叉樹特點

  • 非葉子節點最多擁有兩個子節點。
  • 非葉子節點值大於左邊子節點、小於右邊子節點。
  • 樹的左右兩邊的層級數相差不會大於1。
  • 沒有值相等重複的節點。

平衡二叉樹-v2-11e39093993f673de576f57ea614d604_hd

B樹:平衡多路查找樹
將平衡二叉樹變成多路,進而減少了樹的層級,提升了數據查找的效率。
B樹-v2-22c2264cc1c6c603dfeca4f84a2575901_hd
B+樹
應用:操作系統索引和數據庫索引

1.由於內部節點不存儲鍵值關聯的附屬數據,所以內部節點節省的空間可以存放更多的鍵值。也就意味着從磁盤存取一頁時可獲得更多的鍵值信息。
2.葉節點形成了一個鏈,所以對樹的全掃描就是對所有葉節點的線性遍歷。
特點:

  • 非葉子結點的子樹指針與關鍵字個數相同。
  • 非葉子結點的子樹指針P[i],指向關鍵字值屬於[K[i], K[i+1])的子樹。
  • 爲所有葉子結點增加一個鏈指針。
  • 所有關鍵字都在葉子結點出現。

B+樹-v2-33826dac98d666a26b0ffee8cb2ea15a91_r.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章