因為測試資料比較少,是不是innodb會預測查找的時間,如果不走索引的時間比走索引的時間短就會不走索引?
少量的資料測試不是太恰當。
用到索引,最先想到的應該是檢索效率,這個和緩存命中率有點類似。
innodb的非主鍵索引,在資料查詢的時候也是也是執行了2次的查找,先通過非主鍵索引查找對應記錄的主鍵,然後主鍵查找資料。
現在,來看看非主鍵索引的查詢效率,索引的存儲結構都是B+樹,那麼樹的周遊就和實際的資料息息相關了。
比如你的age字段,假設有2個15,2個20,那麼查找15的時候呢,先找到15然後進行資料的比對,執行過程就是這樣的。
當然,有時候mysql不不一定按照查詢優化方案執行查詢,因為它認為這樣不是最優方案。
是的,如果資料量太少,mysql優化器發現可以不走索引快,就會自動不走索引的。是以測試的時候,盡量不要資料太少了,至少保持10-20條資料量。
mysql在生成執行計劃的時候,where值不一樣,可能選擇也不一樣,這就是選擇因子的問題,也就是該值的選擇率。
這就是為什麼你同一條SQL,執行了不同的執行計劃,當你這個資料量增加的情況下,選擇率不變的情況,它的執行計劃也會不一樣。因為它發現走索引更快。