資料庫專項

2021-10-14 10:46:00 字數 3125 閱讀 4145

mysql和oracle資料引擎介紹

參考:

①:在mysql資料庫中,常用的引擎主要就是2個:innodb和myisam

innodb支援事務,還有行級鎖和外來鍵的約束

myisam表鎖.且不持支事務

②: oracle中不存在引擎的概念,但是oracle有oltp和olap模式的區分

事務四大特性

acid: 原子性 一致性 隔離性 永續性

事務的併發問題

髒讀:事務a更新了資料,事務b讀取了a更新但未提交的資料,之後事務a回滾操作,那麼b就是髒讀

不可重複讀:事務a多次讀取同一資料,事務b在a多次讀取的過程中更新並提交了資料,導致a讀取的資料不一樣(側重更新,行內容不一樣)

幻讀: 事務a多次讀取同一資料,事務b在a多次讀取的過程中刪除或新增了資料並提交了資料,導致a讀取的資料不一樣(側重新增和刪除,行數量不一樣)

解決方案:解決不可重複讀 鎖行, 解決幻讀需要鎖表。

事務的隔離級別

讀未提交 read-uncommitted :會引發的問題 髒讀 不可重複讀 幻讀

讀已提交 read-committed :會引發的問題 不可重複讀 幻讀

可重複讀 repeatable-read :會引發的問題 幻讀

序列化 serializable :不會引發問題

mysql: innodb支援4種事務 myisam不支援

oracle:持支2種事務 read_commited serializable

innodb引擎的行鎖是怎麼實現的?

答: innodb是基於索引來完成行鎖,for update 可以根據條件來完成行鎖鎖定

資料庫設計的三大正規化

參考:

第一正規化: 列不能重複 (列不能分割,乙個列中不能有多個屬性)

第二正規化: 消除部分依賴 (非主屬性依賴主鍵全部,不是依賴主鍵的一部分)

第三正規化: 消除依賴傳遞 (非主屬性是直接依賴於主鍵,還是依賴非主鍵列)

mysql b+tree索引和hash索引的區別,這是mysql的索引演算法?

① hash索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位; 但只能滿足 = ,in, >=,<=

② b+樹索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問;

參考:

聚集索引和非聚集索引區別?

聚集索引表記錄的排列順序和索引的排列順序一致,所以查詢效率快,缺點就是修改慢

非聚集索引制定了表中記錄的邏輯順序,但是記錄的物理和索引不一定一致

主鍵通常自動都是聚集索引

建立索引,參考

建立索引的原則

①:最左字首匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)[加粗]就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

②:較頻繁作為查詢條件的字段才去建立索引

③:更新頻繁欄位不適合建立索引

④:重複度大的列不適合做索引 如:性別

⑤:不要過度使用索引,索引過多,會降低寫操作的效能

⑥:使用短索引,如果是長字串索引,應指定乙個字首長度,這樣可以節省大量的空間

⑦:在where中的列

⑧:對於定義為text、image和bit的資料型別的列不要建立索引

⑨:索引列應該指定為not null(非空)

使用索引一定快嗎?

參考:

資料庫優化方案:

1,加索引 2,sql優化避免索引失效 3,資料庫碎片整理 4,資料壓縮 5,減少返回資料(分頁,只返回必要資料) 6,減少互動次數(批量插入) 7,left join 左邊使用資料量小的表

count(),count(1)和count(欄位名)的區別

count() ≈ count(1)

count():一共有多少行,空值(null)也算

count(欄位名): 這個欄位有多少個,空值(null)不算

按照效率排序的話,count(字段))

索引失效的場景

a,函式或表示式或數**算 例如substr()

b,like 『%param』 百分號放後面可以走索引

c,is null

d, !=

e, 等號兩邊型別不相等 例如:列是string 條件是 int 轉換的時候就不走索引了

索引生效場景

a, = 等號兩邊的型別相等

b, in

c, like 『param%』

d, > <

e,between

組合索引

參考:

①: 組合索引的字段都在where條件上, 無論順序如何都會使用索引

②: 組合索引的第乙個字段必須[加黑]在where條件上, 組合索引會生效

③: order by 只能使用第乙個字段,才能用到索引

④:最左字首匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)[加粗]就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

慢查詢優化

參考:

執行計畫 參考:

explain select * fromusertablewhere school_id in (select school_id from schooltale where address= 『hz』)

查詢結果: id select_type table type possible_keys key key_len ref rows extra

行數: 幾行表示有幾個子查詢

id​:查詢的順序 id相同 從上而下 id值越大執行優先級別越高

select_type:查詢型別

table:查詢涉及到的表

type:訪問型別

possible_keys:可能使用的索引

key:實際使用的索引

ref:連線匹配條件

rows:估算的結果集數量

extra:額外資訊

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫 資料庫正規化

關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...

資料庫 資料庫基礎

什麼是sql 結構化查詢語言 structtured query language sql的作用 啟動mysql.exe,連線伺服器後,就可以使用sql來操作伺服器了。類似php中操作mysql的語句就是sql語句 sql標準 由國際標準化組織 iso 制定的,對dbms 資料庫管理系統 的統一操作...