1.索引:
- 針對數據庫中現有的數據,整理出一塊物理存儲下來的用於快速查找數據用的的東西。
- 數據庫中實際數據的存儲會按照某種索引,默認是按照主鍵(特殊的索引),並且數據物理結構上的存儲順序也是按照主鍵的順序。
- 索引的創建會增大物理上的開銷。
2.創建索引時如何選擇列的數據類型?
- 數據類型小:越小的數據類型通常在磁盤、內存和CPU緩存中都需要更少的空間,處理起來更快。能用bit類型,不用int,能用int,不用decimal.
- 數據類型簡單:整形數據比起字符,開銷更小
- 盡量避免Null:含有Null的列,很難進行查詢優化,你可以用0,空字符串' '或者一個特殊的值去代替。
3.什么時候考慮創建索引?
- 一開始做項目的時候,通常不會去考慮對數據庫創建索引這件事,因為沒有大量的數據作為基礎,建立索引區別不大。當系統上線運營了一段時間后,數據庫中數據量達到一定規模時我們可以進行監測,當發現檢索速度變慢(比如大於100ms)時,我們就需要去分析業務邏輯中sql語句where后面的判斷字段,針對這些字段建立索引進行優化。
4.建立索引對sql語句編寫有什么要求?
- 把'='值的條件盡量寫在前面,表示范圍的比如'>'盡量寫在后面,盡量避免使用'or',否則建立索引對優化查詢速度已經沒有意義了。比如查詢語句后面 where gender = 1 and isdelete = 0 and birthday > ‘1990-1-1’,我們可以建立一個包含gender、isdelete和birthday的組合索引
5.索引操作:
-
查看索引
show index from 表名; -
創建索引
create index 索引名 on 表名(字段名1,...);如果只有一個字段名,表示建立單列索引;多個字段名,表示建立組合索引。如果字段為字符類型,可以在字符后面指定長度,比如students(name(20),age),也可以不指定,其他類型(int,bit)的字段不需要指定長度
-
刪除索引
drop index 索引名 on 表名;
6.索引缺點:
- 雖然索引會提升查詢的速度,但同時會降低更新表(insert into|delete from|update)的速度,因為更新表的時候還要保存一下索引文件
- 建立索引,會占用磁盤空間的索引文件
7.性能監測工具profiles的使用------僅限於當前數據庫的本次連接,下次連接失效
示例:
-
開啟運行時間監測
set profiling = 1; -
執行查詢語句
select * from areas where atitle = '北京市'; -
查看執行時間
show profiles; -
為表areas的atitle列創建索引
create index title_index on areas(atitle(20)); -
再次執行查詢語句
select * from areas where atitle = '北京市'; -
再次查看執行時間
show profiles;
