一個機器人位於一個 m x n 網格的左上角
阿新 • • 發佈:2020-12-11
1、MyISAM 與 InnoDB 的區別?
InnoDB:
事務型的儲存引擎,有行級鎖定和外來鍵約束
可靠性高,要求事務、更新頻繁
MyIASM:
預設儲存引擎,不支援事務、外來鍵,但是儲存行數、索引和資料分開儲存,讀取效率高
更新很少、讀取頻繁、發亮需求統計行數的sql
對比項 | MyISAM | InnoDB |
外來鍵 | 不支援 | 支援 |
事務 | 不支援 | 支援 |
行表鎖 |
表鎖,操作一條資料也會鎖住整個表 不適合高併發的操作 |
行鎖,操作時只鎖住某一行,對其他行沒有影響 適合高併發 |
快取 | 只快取索引,不快取真實資料 | 快取索引和真實資料,對記憶體要求較高 |
2. 事務的隔離級別:
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
讀未提交 | 是 | 是 | 是 |
不可重複讀 | 否 | 是 | 是 |
可重複讀 | 否 | 否 | 是 |
序列化 | 否 | 否 | 否 |
3.Mysql 效能優化
1. 當只要一行資料的時候使用 limit 分頁查詢 :
查詢到如果已知會得到一條資料,這種情況下加上limit 1,此時資料庫引擎找到一條結果停止搜尋,不需要繼續查詢
2. 根據需求選擇資料庫引擎:
MyISAM 適用於一些大量的查詢的應用,不適合大量寫功能的應用。
InnoDB適用於哪些需要事務支援的應用。
3. 用not exists 代替 not in :
not exists 用到了連線能夠發揮已經建立好的索引的作用
not in 不能使用索引,所以要每條遍歷比較,資料量大的情況下不建議使用 not in
4. 對操作符的優化,儘量不採用不利於索引的操作符:如
in
not in
is null
is not null
< >
5. 為常用的欄位建立索引
6. 避免 select *
7. 讀寫分離,建立mysql叢集,主從複製。讀寫分開
8. 索引優化,使用自增的欄位作為主鍵
4. MySQL的觸發器:
CREATETRIGGERmytrigger -- 觸發器名稱,使用者自定義
trigger_time --標識觸發時機 BEFORE 或 AFTER
trigger_event ONtbl_name -- 標識觸發事件 INSERT UPDATE DELETE tbl_name: 標識觸發器建立的表名
FOREACHROW
trigger_stmt -- 觸發體程式體,可以是一句SQL,或者 BEGIN 和 END 包含的多條語句