1. 程式人生 > 其它 >一個機器人位於一個 m x n 網格的左上角

一個機器人位於一個 m x n 網格的左上角

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 包含的多條語句