新公司使用mysql存儲關鍵業務數據,之前沒有mysql經驗,本覺得應該跟oracle差很少,閱讀文檔比較後發現仍是有不少不一樣點。mysql
mysql不共享緩存的執行計劃。sql
在oracle裏,sql語句的執行計劃是緩存在SGA中的,因此oracle中能夠使用綁定變量、數組接口等方式達到提高性能的可能,可是mysql不共享執行計劃,有一種叫預處理語句的東西,看起來好像跟oracle綁定變量相似,但其實不能達到避免語句每次都硬解析的效果。數組
innodb存儲引擎不支持位圖索引、函數索引緩存
不僅是innodb,好像目前尚未支持位圖索引的存儲引擎,通常都是傳統的B樹索引。oracle
mysql的查詢優化器不夠理想函數
一個例子,一個低基數列上有B樹索引,根據這個字段查詢,optimizer給出的執行計劃是走索引,而經過ignore index的方式強制不走索引,發現執行時間更少,說明optimizer給出了錯誤的執行計劃。性能
沒有oracle那麼豐富的僞列、擴展函數,也不支持層次查詢、窗口函數優化
如rowid、rownum等索引