資料型別搞錯導致MySQL索引失效

2021-10-18 06:45:22 字數 611 閱讀 9388

工作中遇到了一次索引失效的情況,特此記錄下來。

sql語句:

select

*from

t where sn = 43000899 and updatetime < '2021-01-20 10:00:00' and updatetime > '2021-01-29 10:00:00';

其中sn和updatetime是乙個組合索引,按照正常的邏輯來說應該是用到了這個組合索引,並且是乙個range級別的,但是在程式執行時發現這條sql特別慢,使用explain檢查sql,發現並沒有使用到索引。

後來靈光一現,突然想起之前看過的乙個知識點,資料型別錯誤會導致索引失效,從而進行全表掃瞄,於是去檢查了sn的資料型別,果不其然,sn是varchar型別的,而在sql中卻寫成了int型別的。

正確的sql:

select

*from

t where sn = '94562810' and updatetime < '2021-01-20 10:00:00' and updatetime > '2021-01-29 10:00:00';

再次執行程式,發現sql可以正常的使用索引了。

MySQL 索引與資料型別

在資料庫的查詢操作中,為了提高資料查詢的效率引入了索引的概念。其中,實現索引有幾種不同的方式 雜湊表 有序陣列 搜尋樹等。雜湊表 把資料庫中的值放在陣列中,採用雜湊演算法把key對映到乙個確定的位置,然後把value放在陣列的這個位置。當發生衝突時,採用鍊錶法解決。缺點 只能由於等值查詢無法實現範圍...

mysql資料型別範圍導致失敗

最近一直使用mysql,如果沒有碰上大的資料量,我想一般人都不會注意到資料型別範圍大小的問題。使用mediumint 型別碰上了上千萬的資料,所以導致了資料的失敗。手冊上說 the signed range is 8388608 to 8388607.the unsigned range is 0 ...

Mysql索引的資料型別 原理??

索引的優點 1.通過建立唯一索引,可以保證資料庫每一行資料的唯一性 2.可以大大提高查詢速度 3.可以加速表與表的連線 4.可以顯著的減少查詢中分組和排序的時間。索引的缺點 1.建立索引和維護索引需要時間,而且資料量越大時間越長 2.建立索引需要佔據磁碟的空間,如果有大量的索引,可能比資料檔案更快達...