MySql常見問題描述
1 數(shù)據(jù)庫的三范式是什么
第一范式:列不可再分
第二范式:行可以唯一區(qū)分,主鍵約束
第三范式:表的非主屬性不能依賴與其他表的非主屬性 外鍵約束
且三大范式是一級一級依賴的,第二范式建立在第一范式上,第三范式建立第一第二范式上。
2 數(shù)據(jù)庫的事務(wù)
什么是事務(wù)?: 多條sql語句,要么全部成功,要么全部失敗。
數(shù)據(jù)庫事務(wù)特性ACID:原子性(Atomic)、一致性(Consistency)、隔離性(Isolation)、持久性(Durabiliy)。
原子性Atomic:組成一個事務(wù)的多個數(shù)據(jù)庫操作是一個不可分割的原子單元,只有所有操作都成功,整個事務(wù)才會提交。任何一個操作失敗,已經(jīng)執(zhí)行的任何操作都必須撤銷,讓數(shù)據(jù)庫返回初始狀態(tài)。
一致性:事務(wù)操作成功后,數(shù)據(jù)庫所處的狀態(tài)和它的業(yè)務(wù)規(guī)則是一致的。即數(shù)據(jù)不會被破壞。如A轉(zhuǎn)賬100元給B,不管操作是否成功,A和B的賬戶總額是不變的。
隔離性:在并發(fā)數(shù)據(jù)操作時,不同的事務(wù)擁有各自的數(shù)據(jù)空間,它們的操作不會對彼此產(chǎn)生干擾
持久性:一旦事務(wù)提交成功,事務(wù)中的所有操作都必須持久化到數(shù)據(jù)庫中。
3、索引問題
主鍵索引(PRIMARY) 數(shù)據(jù)列不允許重復(fù),不允許為NULL,一個表只能有一個主鍵。
唯一索引(UNIQUE)數(shù)據(jù)列不允許重復(fù),允許為NULL值,一個表允許多個列創(chuàng)建唯一索引。
普通索引(INDEX)
全文索引(FULLTEXT)
4 SQL優(yōu)化
查詢語句中不要使用select *
盡量減少子查詢,使用關(guān)聯(lián)查詢(left join,right join,inner join)替代
減少使用IN或者NOT IN ,使用exists,not exists或者關(guān)聯(lián)查詢語句替代
or 的查詢盡量用 union或者union all 代替(在確認(rèn)沒有重復(fù)數(shù)據(jù)或者不用剔除重復(fù)數(shù)據(jù)時,union all會更好)
應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。
應(yīng)盡量避免在 where 子句中對字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,可以在num上設(shè)置默認(rèn)值0,確保表中num列沒有null值,然后這樣查詢: select id from t where num=0。
5 大表如何優(yōu)化
限定數(shù)據(jù)的范圍,務(wù)必禁止不帶任何限制數(shù)據(jù)范圍條件的查詢語句。比如:我們當(dāng)用戶在查詢訂單歷史的時候,我們可以讀/寫分離
垂直分區(qū)
水平分區(qū)

浙公網(wǎng)安備 33010602011771號