[TOC]
## 索引的優缺點
優點:
1. 大大加快數據的檢索速度,這也是創建索引的最主要的原因
2. 加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
3. 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
缺點:
1. 創建索引需要耗費一定的時間,但是問題不大,一般索引只要build一次
2. 索引需要占用物理空間,特別是聚集索引,需要較大的空間
3. 當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度,這個是比較大的問題。
## 索引的使用
? ? ?需要在這些列上建立索引:
1)在經常需要搜索的列上,這是毋庸置疑的;?
2)經常同時對多列進行查詢,且每列都含有重復值可以建立組合索引,組合索引盡量要使常用查詢形成索引覆蓋(查詢中包含的所需字段皆包含于一個索引中,我們只需要搜索索引頁即可完成查詢)。 同時,該組合索引的前導列一定要是使用最頻繁的列。對于前導列的問題,在后面[sqlite](https://so.csdn.net/so/search?q=sqlite&spm=1001.2101.3001.7020)的索引使用介紹中還會做討論。
3)在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度,連接條件要充分考慮帶有索引的表。;?
4)在經常需要對范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的,同樣,在經常需要排序的列上最好也創建索引。
6)在經常放到where子句中的列上面創建索引,加快條件的判斷速度。要注意的是where字句中對列的任何操作(如計算表達式,函數)都需要對表進行整表搜索,而沒有使用該列的索引。所以查詢時盡量把操作移到等號右邊。
不應該創建索引:
1)很少在查詢中使用的列
2)含有很少非重復數據值的列,比如只有0,1,這時候掃描整表通常會更有效
3)對于定義為TEXT,IMAGE的數據不應該創建索引。這些字段長度不固定,或許很長,或許為空。
當然,對于更新操作遠大于查詢操作時,不建立索引。也可以考慮在大規模的更新操作前drop索引,之后重新創建,不過這就需要把創建索引對資源的消耗考慮在內。總之,使用索引需要平衡投入與產出,找到一個產出最好的點。
## 查詢不生效
1、=等于和in(某幾個值)是會保持索引字段有效。
2、><這樣大于小于和between and(區間判斷)雖然不會讓該索引字段失效,但是會導致后續的其他索引字段失效。
3、算術運算(加減乘除)和!=不等于一樣,都是嚴重讓索引字段完全失效的,包括后續的其他索引字段也失效。
- Android
- 四大組件
- Activity
- Fragment
- Service
- 序列化
- Handler
- Hander介紹
- MessageQueue詳細
- 啟動流程
- 系統啟動流程
- 應用啟動流程
- Activity啟動流程
- View
- view繪制
- view事件傳遞
- choreographer
- LayoutInflater
- UI渲染概念
- Binder
- Binder原理
- Binder最大數據
- Binder小結
- Android組件
- ListView原理
- RecyclerView原理
- SharePreferences
- AsyncTask
- Sqlite
- SQLCipher加密
- 遷移與修復
- Sqlite內核
- Sqlite優化v2
- sqlite索引
- sqlite之wal
- sqlite之鎖機制
- 網絡
- 基礎
- TCP
- HTTP
- HTTP1.1
- HTTP2.0
- HTTPS
- HTTP3.0
- HTTP進化圖
- HTTP小結
- 實踐
- 網絡優化
- Json
- ProtoBuffer
- 斷點續傳
- 性能
- 卡頓
- 卡頓監控
- ANR
- ANR監控
- 內存
- 內存問題與優化
- 圖片內存優化
- 線下內存監控
- 線上內存監控
- 啟動優化
- 死鎖監控
- 崩潰監控
- 包體積優化
- UI渲染優化
- UI常規優化
- I/O監控
- 電量監控
- 第三方框架
- 網絡框架
- Volley
- Okhttp
- 網絡框架n問
- OkHttp原理N問
- 設計模式
- EventBus
- Rxjava
- 圖片
- ImageWoker
- Gilde的優化
- APT
- 依賴注入
- APT
- ARouter
- ButterKnife
- MMKV
- Jetpack
- 協程
- MVI
- Startup
- DataBinder
- 黑科技
- hook
- 運行期Java-hook技術
- 編譯期hook
- ASM
- Transform增量編譯
- 運行期Native-hook技術
- 熱修復
- 插件化
- AAB
- Shadow
- 虛擬機
- 其他
- UI自動化
- JavaParser
- Android Line
- 編譯
- 疑難雜癥
- Android11滑動異常
- 方案
- 工業化
- 模塊化
- 隱私合規
- 動態化
- 項目管理
- 業務啟動優化
- 業務架構設計
- 性能優化case
- 性能優化-排查思路
- 性能優化-現有方案
- 登錄
- 搜索
- C++
- NDK入門
- 跨平臺
- H5
- Flutter
- Flutter 性能優化
- 數據跨平臺