爲何sql 語句邏輯相同,性能卻差距巨大

 

 

一 索引字段函數操做

對於索引字段作函數操做,可能破壞索引值的有序性,所以優化器就決定放棄走樹搜索功能mysql

二 隱式類型轉換

數據類型轉換的規則是什麼?sql

爲何有數據類型轉化,就須要走全索引掃描ide

在mysql中,字符串和數字比較的時候,是將字符串轉成數字函數

這裏的tradeId是varchar類型優化

select * from trade_log where tradeId=110717;編碼

至關於spa

select * from trade_log where cast(tradeId as signed int)=110717;索引

對索引字段作函數操做,優化器會放棄走樹搜索功能,使用了轉換函數,因此再也不使用索引字符串

 

三 隱式字符編碼轉化

 

mysql> select d.* from tradelog l, trade_detail d where d.tradeid=l.tradeid and l.id=2; /* 語句 Q1*/字符編碼

雖然d表上字段l.tradeid有索引,可是走了所有掃描,在索引上使用了函數,優化器放棄了走索引樹

select * from trade_detail where CONVERT(traideid USING utf8mb4)=$L2.tradeid.value;

相關文章
相關標籤/搜索