1.事務四大特性
- 原子性:要么執行,要么不執行,也就是不可再分,已經最小了。
- 隔離性:所有操作全部執行完以前其它會話不能看到過程。
- 一致性:事務前后,數據總額一致。
- 持久性:一旦事務提交,對數據的改變就是永久的
2.數據庫隔離級別
- 臟讀:事務B讀取事務A還沒有提交的數據
- 不可重復讀:兩次事務讀的數據不一致
- 幻讀:事務A修改了數據,事務B也修改了數據,這時在事務A看來,明明修改了數據,咋不一樣
3.MYSQL的兩種存儲引擎區別(事務、鎖級別等等),各自的適用場景
引擎 特性
MYISAM 不支持外鍵,表鎖,插入數據時,鎖定整個表,查表總行數時,不需要全表掃描
INNODB 支持外鍵,行鎖,查表總行數時,全表掃描
4.索引有B+索引和hash索引
索引 區別
Hash hash索引,等值查詢效率高,不能排序,不能進行范圍查詢
B+ 數據有序,范圍查詢
5.聚集索引和非聚集索引
索引 區別
聚集索引 數據按索引順序存儲,中子結點存儲真實的物理數據
非聚集索引 存儲指向真正數據行的指針
6.索引的優缺點,什么時候使用索引,什么時候不能使用索引
- 索引最大的好處是提高查詢速度,
- 缺點是更新數據時效率低,因為要同時更新索引
- 對數據進行頻繁查詢進建立索引,如果要頻繁更改數據不建議使用索引。
7.InnoDB索引和MyISAM索引的區別
一是主索引的區別,InnoDB的數據文件本身就是索引文件。而MyISAM的索引和數據是分開的。
二是輔助索引的區別:InnoDB的輔助索引data域存儲相應記錄主
8.索引的底層實現(B+樹,為何不采用紅黑樹,B樹)重點
樹 區別
紅黑樹 增加,刪除,紅黑樹會進行頻繁的調整,來保證紅黑樹的性質,浪費時間
B樹也就是B-樹 B樹,查詢性能不穩定,查詢結果高度不致,每個結點保存指向真實數據的指針,相比B+樹每一層每屋存儲的元素更多,顯得更高一點。
B+樹 B+樹相比較於另外兩種樹,顯得更矮更寬,查詢層次更淺
9.B+樹的實現
一個m階的B+樹具有如下幾個特征:
1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。
2.所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素
10.為什么使用B+Tree
索引查找過程中就要產生磁盤I/O消耗,主要看IO次數,和磁盤存取原理有關。
根據B-Tree的定義,可知檢索一次最多需要訪問h個節點。數據庫系統的設計者巧妙利用了磁盤預讀原理,
將一個節點的大小設為等於一個頁,這樣每個節點只需要一次I/O就可以完全載入
局部性原理與磁盤預讀
11.Sql的優化
1.sql盡量使用索引,而且查詢要走索引
2.對sql語句優化
子查詢變成left join
limit 分布優化,先利用ID定位,再分頁
or條件優化,多個or條件可以用union all對結果進行合並(union all結果可能重復)
不必要的排序
where代替having,having 檢索完所有記錄,才進行過濾
避免嵌套查詢
對多個字段進行等值查詢時,聯合索引
12.索引最左前綴問題
如果對三個字段建立聯合索引,如果第二個字段沒有使用索引,第三個字段也使用不到索引了
13.索引分類,索引失效條件
索引類型 概念
普通索引 最基本的索引,沒有任何限制
唯一索引 與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引 它是一種特殊的唯一索引,不允許有空值。
全文索引 針對較大的數據,生成全文索引很耗時好空間。
組合索引 為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則
失效條件
條件是or,如果還想讓or條件生效,給or每個字段加個索引
like查詢,以%開發
內部函數
對索引列進行計算
is null不會用,is not null 會用
14.數據庫的主從復制
復制方式 操作
異步復制 默認異步復制,容易造成主庫數據和從庫不一致,一個數據庫為Master,一個數據庫為slave,通過Binlog日志,slave兩個線程,一個線程去讀master binlog日志,寫到自 己的中繼日志一個線程解析日志,執行sql,master啟動一個線程,給slave傳遞binlog日志
同步復制 只有把master發送的binlog日志寫到slave的中繼日志,這時主庫,才返回操作完成的反饋,性能有一定降低
並行操作 slave 多個線程去請求binlog日志
15.long_query怎么解決
設置參數,開啟慢日志功能,得到耗時超過一定時間的sql
16.varchar和char的使用場景
類型 使用場景
varchar 字符長度經常變的
char 用字符長度固定的
17.數據庫連接池的作用
維護一定數量的連接,減少創建連接的時間
更快的響應時間
統一的管理
19.分庫分表,主從復制,讀寫分離
讀寫分離,讀從庫,寫主庫
spring配置兩個數據庫,通過AOP(面向切面編程),在寫或讀方法前面進行判斷得到動態切換數據源。
20.數據庫三范式
級別 概念
1NF 屬性不可分
2NF 非主鍵屬性,完全依賴於主鍵屬性
3NF 非主鍵屬性無傳遞依賴
21.關系型數據庫和非關系型數據庫區別
關系型數據庫
優點
- 容易理解:二維表結構是非常貼近邏輯世界一個概念,關系模型相對網狀、層次等其他模型來說更容易理解;
- 使用方便:通用的SQL語言使得操作關系型數據庫非常方便;
- 易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗余和數據不一致的概率;
- 支持SQL,可用於復雜的查詢。
- 支持事務
缺點
- 為了維護一致性所付出的巨大代價就是其讀寫性能比較差;
- 固定的表結構;
- 不支持高並發讀寫需求;
- 不支持海量數據的高效率讀寫
非關系型數據庫
- 使用鍵值對存儲數據;
- 分布式;
優點
- 無需經過sql層的解析,讀寫性能很高
- 基於鍵值對,數據沒有耦合性,容易擴展
- 存儲數據的格式:nosql的存儲格式是key,value形式
缺點
- 不提供sql支持
22.數據庫中join的inner join, outer join, cross join
1.以A,B兩張表為例
A left join B
選出A的所有記錄,B表中沒有的以null 代替
right join 同理
2.inner join
A,B的所有記錄都選出,沒有的記錄以null代替
3.cross join (笛卡爾積)
A中的每一條記錄和B中的每一條記錄生成一條記錄
例如A中有4條,B中有4條,cross join 就有16條記錄
23.有哪些鎖,select時怎么加排它鎖
鎖 概念
樂觀鎖 自己實現,通過版本號
悲觀鎖 共享鎖,多個事務,只能讀不能寫,加 lock in share mode
排它鎖 一個事務,只能寫,for update
行鎖 作用於數據行
表鎖 作於用表
24.死鎖怎么解決
找到進程號,kill 進程
25.最左匹配原則
最左匹配原則是針對索引的
舉例來說:兩個字段(name,age)建立聯合索引,如果where age=12這樣的話,是沒有利用到索引的,
這里我們可以簡單的理解為先是對name字段的值排序,然后對age的數據排序,如果直接查age的話,這時就沒有利用到索引了,
查詢條件where name=‘xxx’ and age=xx 這時的話,就利用到索引了,再來思考下where age=xx and name=’xxx‘ 這個sql會利用索引嗎,
按照正常的原則來講是不會利用到的,但是優化器會進行優化,把位置交換下。這個sql也能利用到索引了