mysql不使用索引特例
mysql索引
今天發現mysql的一個奇怪的事情:
表結構:
表索引:
應該可以看到ver是varchar類型,並且有索引的。
搜索一條沒有的數據:
type居然是all,rows是整個表,什麼情況,沒有使用索引?
再搜索一條有的數據:
正常 !!
去除explain,上種沒有的要1秒多,下種只要0.0,說明上種確實沒有用索引!!
這是個毛線情況!我自認為對索引還是有一定功力的。翻遍手冊也沒找到答案。突發了一個靈感:
用單引將123擴起,果斷正常了!!!
這個到底是什麼原因?我沒有找到官方的答案,但據我的經驗猜想的是:
字符串與數字去比較,會將字符串先轉為數字,這樣就可能打擾了索引
這樣又引發了另一個猜想,如果數據是數字,現搜索一個字符串會如何?
經過我的測試發現,依然會使用索引的。這樣就更加符合我之前的猜想,因為搜索條件是字符串,只是將搜索條件轉化為索引的數字,索引並沒有被打擾。