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 * fromusertable
where 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 資料庫管理系統 的統一操作...