mysql核心
關鍵字:全文索引 索引外接
兩種核心:myisam 和innodb
區別1.count(*)
myisam會儲存總行數,innodb不會儲存總行數,select count(*)時是一行一行進行掃瞄的,而myisam操作select count(*)時結果很快
實踐:資料量大的表,innodb就盡量不要使用select count(*)查詢,效能消耗大
備註:只有查詢全表時myisam才會直接返回結果,加where條件之後的話myisam和innodb原理相同
2.全文索引(
myisam支援全文索引,innodb5.6之前不支援全文索引
備註:資料量大併發量大時,不建議使用資料庫自帶的全文索引,應該使用索引外接的架構設計方法,myisam也不是最優選。
3.事務
myisam不支援事務,innodb支援事務
備註:事務具有commit,rollback這些崩潰修復能力;myisam在系統異常崩潰時可能造成檔案損壞。但是事務很耗效能,影響吞吐量,所以盡量只對一致性要求較高的業務使用事務。
4.外來鍵
myisam不支援外來鍵,innodb支援外來鍵
備註:資料量大併發量大時,都不建議使用外來鍵,要通過應用程式保證資料的完整。
5行鎖和表鎖
myisam只支援表鎖,innodb還支援行鎖
備註:myisam執行語句時,會對整個表加鎖,資料量大併發量大時,效能影響較大
innodb細粒度行鎖,在資料量大時,效能影響較小
實踐:select+insert時使用myisam,因為myisam在檔案尾部順序增加記錄速度快;但是大部分是讀寫混合,資料量大時就使用innodb
坑:innodb的行鎖是實現在索引上的,而不是鎖在屋裡行記錄上,如果沒有命中索引,就不能使用行鎖,將使用表鎖
1.5.2 示例
例如有使用者資訊表如下,且無其他索引:
t_user(uid, uname, age, ***) innodb;uid pk
那麼有如下結論:
update t_user set age=10 where uid=1; #命中索引,行鎖。
update t_user set age=10 where uid != 1; #未命中索引,表鎖。
update t_user set age=10 where name='shenjian'; #無索引,表鎖。
啟示:innodb務必建好索引,否則鎖粒度較大,會影響併發。
總結:
mysql核心比較 MySQL兩種核心對比
mysql核心 關鍵字 全文索引 索引外接 兩種核心 myisam 和innodb 區別1.count myisam會儲存總行數,innodb不會儲存總行數,select count 時是一行一行進行掃瞄的,而myisam操作select count 時結果很快 實踐 資料量大的表,innodb就盡...
mysql核心 MySQL兩種核心對比
mysql核心 關鍵字 全文索引 索引外接 兩種核心 myisam 和innodb 區別1.count myisam會儲存總行數,innodb不會儲存總行數,select count 時是一行一行進行掃瞄的,而myisam操作select count 時結果很快 實踐 資料量大的表,innodb就盡...
mysql查詢比較 mysql兩種查詢的比較
方法2更好。你可以在mysql 裡面嘗試一下explain。以下是我的分析資料 資料是自己加上的 explain select from good,good category where good.cate id good category.id id select type table type ...