Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
閱讀指南
文章目錄
1.事務四大特性
原子性,要么執行,要么不執行隔離性,所有操作全部執行完以前其它會話不能看到過程一致性,事務前后,數據總額一致持久性,一旦事務提交,對數據的改變就是永久的
2.數據庫隔離級別
多個事務讀可能會道理以下問題
臟讀:事務B讀取事務A還沒有提交的數據
不可重復讀:,一行被檢索兩次,并且該行中的值在不同的讀取之間不同時
幻讀:當在事務處理過程中執行兩個相同的查詢,并且第二個查詢返回的行集合與第一個查詢不同時
這兩個區別在于,不可重復讀重點在一行,幻讀的重點 ,返回 的集合不一樣
示例圖,Id =1這一行
幻讀,返回的集合不一樣
隔離級別總結
3.MYSQL的兩種存儲引擎區別(事務、鎖級別等等),各自的適用場景
引擎特性
MYISAM
不支持外鍵,表鎖,插入數據時,鎖定整個表,查表總行數時,不需要全表掃描
INNODB
支持外鍵,行鎖,查表總行數時,全表掃描
4.索引有B 索引和hash索引
索引區別
Hash
hash索引,等值查詢效率高,不能排序,不能進行范圍查詢
數據有序,范圍查詢
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.怎么解決
設置參數,開啟慢日志功能,得到耗時超過一定時間的sql
16.varchar和char的使用場景
類型使用場景
varchar
字符長度經常變的
char
用字符長度固定的
17.數據庫連接池的作用
維護一定數量的連接,減少創建連接的時間
更快的響應時間
統一的管理
19.分庫分表,主從復制,讀寫分離
讀寫分離,讀從庫,寫主庫spring配置兩個數據庫,通過AOP(面向切面編程),在寫或讀方法前面進行判斷得到動態切換數據源。
20.數據庫三范式
級別概念
1NF
屬性不可分
2NF
非主鍵屬性,完全依賴于主鍵屬性
3NF
非主鍵屬性無傳遞依賴
21.關系型數據庫和非關系型數據庫區別
關系型數據庫
優點
1、容易理解:二維表結構是非常貼近邏輯世界一個概念,關系模型相對網狀、層次等其他模型來說更容易理解;
2、使用方便:通用的SQL語言使得操作關系型數據庫非常方便;
3、易于維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗余和數據不一致的概率;
4、支持SQL,可用于復雜的查詢。
5.支持事務
缺點
1、為了維護一致性所付出的巨大代價就是其讀寫性能比較差;
2、固定的表結構;
3、不支持高并發讀寫需求;
4、不支持海量數據的高效率讀寫
非關系型數據庫
1、使用鍵值對存儲數據;2、分布式;優點無需經過sql層的解析,讀寫性能很高基于鍵值對,數據沒有耦合性,容易擴展存儲數據的格式:nosql的存儲格式是key,value形式缺點不提供sql支持
22.數據庫中join的left join , inner join, cross join
1.以A,B兩張表為例
A left join B
選出A的所有記錄,B表中沒有的以null 代替
right join 同理
2.inner join
A,B有交集的記錄
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也能利用到索引了
之前的排版有問題,效果不好,重新排了版,增加了目錄和優化了展示,
如果覺得對你有幫助的話,求點贊,求關注,比心
*請認真填寫需求信息,我們會在24小時內與您取得聯系。