事務四大特性(acid)
資料庫隔離級別
資料庫三正規化
說一說你能想到的sql的優化?
避免select *,將需要查詢的字段列出來
使用連線(join)來代替子查詢
用exists代替in
使用limit對查詢記錄進行限定
盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄
盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃瞄。盡量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄
什麼是資料庫索引?
資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料。索引通常使用b_tree。b_tree索引加速了資料訪問,因為儲存引擎不會再去掃瞄整張表得到資料;相反,它從根節點開始,根節點儲存了子節點的指標,儲存引擎會根據指標快速尋找資料。
mysql資料庫的四類索引
index --普通索引,資料可以重複,沒有任何限制
unique --唯一索引,要求索引列的值必須唯一,但允許有空值
primary key --主鍵索引,是一種特殊的唯一索引,乙個表只能有乙個主鍵,不允許空值,一般是在建立表的同時建立主鍵索引
組合索引 --多個欄位上建立的索引,只有在查詢條件中使用了建立索引時的第乙個字段,索引才會被使用。
fulltext – 全文索引,是對於大表的文字域:char,varchar,text列才能建立全文索引,主要用於查詢文字中的關鍵字,並不是直接與索引中的值進行比較。fulltext更像是乙個搜尋引擎,配合match against操作使用,而不是一般的where語句加like。
注:全文索引目前只有myisam儲存引擎支援全文索引,innodb引擎5.6以下版本還不支援全文索引
所有儲存引擎對每個表至少支援16個索引,總索引長度至少為256位元組,索引有兩種儲存型別,包括b型樹索引和雜湊索引。
為什麼使用b+樹做索引而不使用雜湊表做索引?
聚簇索引和非聚簇索引,在查詢資料的時候有什麼區別?
聚簇索引查詢比較快
因為主鍵索引樹的葉子節點直接就是我們要查詢的整行資料了。而非主鍵索引的葉子節點是主鍵的值,查到主鍵的值以後,還需要再通過主鍵的值再進行一次查詢
索引的優缺點,什麼時候使用索引,什麼時候不能使用索引?
優點:提高查詢效率
缺點:更新資料時效率低,因為要同時更新索引
對資料庫進行頻繁查詢時要建立索引,如果要頻繁更改資料時不建議使用索引
儲存引擎myisam和innodb的區別?
1)innodb支援事務,myisam不支援。
2)myisam適合查詢以及插入為主的應用,innodb適合頻繁修改以及涉及到安全性較高的應用。
3)innodb支援外來鍵,myisam不支援。
4)從mysql5.5.5以後,innodb是預設引擎。
5)myisam支援全文型別索引,而innodb不支援全文索引。
6)innodb中不儲存表的總行數,select count() from table時,innodb需要掃瞄整個表計算有多少行,但myisam只需簡單讀出儲存好的總行數即可。注:當count()語句包含where條件時myisam也需掃瞄整個表。
現在一般都選用innodb,主要是myisam的全表鎖,讀寫序列問題,併發效率鎖表,效率低,myisam對於讀寫密集型應用一般是不會去選用的。
應用場景:
char和varchar的區別?
delete、drop、truncate區別?
面試題 資料庫
今天面試,遇到資料庫方面的問題,由於好久沒接觸過,很多都忘記了,回來查了資料,整理一下 1 觸發器與儲存過程的區別 觸發器 是一種特殊型別的儲存過程,當使用下面的一種或多種資料修改操作在指定表中對資料進行修改時,觸發器會生效 update insert 或 delete。觸發器可以查詢其它表,而且可...
資料庫 面試題
正規化 第一正規化 1nf 所謂第一正規化 1nf 是指在關係模型中,所有的域都應該是原子性的,而不能是集合 陣列 記錄等非原子資料項。第二正規化 2nf 在1nf基礎上消除非主屬性對主碼的部分函式依賴。第三正規化 3nf 在2nf基礎上消除非主屬性對主碼的傳遞函式依賴。巴斯 科德正規化 bcnf ...
資料庫面試題
這個主要是給自己看的,答案都是網上搜的 乙個叫department的表,裡面只有乙個字段 name 一共有4條紀錄,分別是a,b,c,d,對應四個球對,現在四個球對進行比賽,用一條sql語句顯示所有可能的比賽組合 select a.name,b.name fromdepartment a,depar...