1.全值匹配,這是最好的選擇,因為索引欄位用的越多,精確度高。使用四個當然比用三個好了
2.最佳左字首,因為索引先按照第乙個排序嘛,這裡有兩重理解。一般來講,第乙個字段排序就可以過濾很多資料了,所以用這個索引字段當然效果好了,你用別的字段不好,因為過濾的少嘛。當然這個和我們建立索引的順序有關,我們也習慣把重複少的字段優先建立索引,這樣盡可能的減少比較次數。另外,你也必須用最左邊去取值,因為你如果跳過的話,沒有了左邊的字段,索引直接失效。就好比給你乙個單詞讓你查字典,如果你從第二個字母開始查,請問怎麼查,那只能把整個字典翻一遍了。
3.不再索引列上做計算,函式,型別轉換。型別轉換,原來int型,乙個數字就是乙個數字,安照乙個數字取比較大小排序。現在把乙個資料轉成varchar型別,mysql還是會把字串變成整形取比較。但是字串轉換成int型別值就變了。字串是乙個字元對應乙個整形,並且排序的時候乙個字元乙個字元的比較,數值大小變了,排序規則變了,那麼索引結構也變了。在比如計算處理,id+1=5 的值,mysql解析的時候id的值是5,通過索引比較就可以取出值。但是當id+1的時候,你可以理解為把id列的資料全部加了1,索引排序的順序被打破。
4.不能使用索引範圍條件右邊的列,當然不能用了。c1>1 and c2=2;首先查詢c1=1的列,然後往右走取出所有資料,這些資料裡面就有問題了。問題在於,如果是c1 =1 and c2=2,那麼取出只是c1=1 c2=2的資料。至於c3什麼的不管。可是現在問題來了,c1>1,大於1 的資料很多。c1=2 c1=3 c1=4 c1=5都可以,那麼這些所有資料裡面都可以有c2=2 的資料,因此需要把這些全都掃瞄。你把這些資料全都掃瞄了,就是類似於全表的掃瞄嘛,索引當然失效了。
5.盡量使用索引覆蓋,索引覆蓋是從索引裡面取資料,速度比從表裡面快。
6.不能使用!= ,你說不等於,那就是全表嘛
7.is null is not null也無法使用索引,沒有值怎麼比較,怎麼排序?
8.like 『%aaaa』
9.字串使用要注意加上單引號
10.使用or in 失效,一般非主鍵索引失效,主鍵索引有時失效有時不失效。和資料量有關。
Swift實戰技巧
swift實戰技巧 給oc呼叫的方法需要新增 objc標記,一般的action target的處理方法,通知的處理方法等需要新增 objc標記 objc func onrefresh 使用方法型如 selector 方法名稱 eg.selector self.onrefresh 更加詳細的介紹可以看...
vue高階實戰技巧 如何優化專案
require.context 批量require檔案 1 以業務為模組建立相應的模組目錄 mode1 模組資料夾 pages 模版資料夾 model1.index.vue 模版檔案 model1.second.vue 模版檔案 index.routes.js 此模組的路由檔案index.route...
Android實戰技巧 ViewStub的應用
在開發應用程式的時候,經常會遇到這樣的情況,會在執行時動態根據條件來決定顯示哪個view或某個布局。那麼最通常的想法就是把可能用到的view都寫在上面,先把它們的可見性都設為view.gone 然後在 中動態的更改它的可見性。這樣的做法的優點是邏輯簡單而且控制起來比較靈活。但是它的缺點就是,耗費資源...