1. 程式人生 > >SQL-基本學習II-資料庫引擎與索引

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.