數據庫對象:索引(INDEX)
-
例如:select * from table1 where id=10000
-
數據庫在執行時,遍歷整個了表,直到ID等於10000的這一行被找到爲止
-
當有了索引後,我們可以通過它快速的定位到ID等於10000的這一行
-
-
索引是一種可以提高查詢效率的一種結構,不同的數據庫,對這種結構的設計是不同的
-
數據庫索引好比是一本書前面的目錄,通過目錄我們可以快速定位到我們想要內容的位置
-
索引對數據的統計是數據庫自動完成的,應用索引時,只要數據庫認爲可以使用某個已創建的索引時就會自動應用
-
命名通常以’idx’開頭,如:idx_emp_ename
創建索引
-
當某個字段需要索引時,就可以爲之創建索引,該索引被稱爲單列索引
-
索引也可以指定多個字段,這種索引被稱爲複合索引,也稱爲多列索引
-
語法:CREATE UNIQUE INDEX index_name ON table_name(字段1,字段2…)
-
index_name:索引名稱
-
table_name:表名
-
UNIQUE:表示唯一索引,不允許指定的字段中任何兩行數據具有相同索引值
-
複合索引(例子)
-
經常在ORDER BY子句中使用job和sal作爲排序依據,可以建立複合索引:
- CREATE INDEX idx_emp_job_sal ON emp(job,sal);
-
當做下面的查詢時,會自動應用索引:
- SELECT empno,ename,job,sal FROM emp ORDER BY job,sal;
基於函數的索引
-
索引也可以指定某個函數,如:
-
需要在emp表的ename列上執行大小寫無關的搜索,可以在此列上建立一個基於UPPER函數的索引:
- CREATE INDEX idx_emp_ename_upper ON emp(UPPER(ename));
-
當做下面的查詢時,會自動應用索引:
- SELECT * FROM emp WHERE UPPER(ename)=‘KING’;
-
修改和刪除索引
-
如果經常在索引指定的列上執行DML操作,需要定期重建索引,提高索引的空間利用率
- 語法:ALTER INDEX index_name REBULID;
-
當一個表上有不合理的索引,會導致操作性能下降,需要刪除該索引
- 語法:DROP INDEX index_name;
合理使用索引提升查詢效率
-
爲經常出現在WHERE子句中的列創建索引
-
爲經常出現在ORDER BY、DISTINCT後面的字段建立索引,如果建立的是複合索引,索引的字段順序要和這些關鍵字後面的字段順序一致
-
爲經常作爲表的連接體條件的列創建索引
-
不要再經常做DML操作的表上建立索引
-
不要再小表上建立索引,小表指的是數據量小的
-
限制表上的索引數目,索引並不是越多越好
-
刪除很少被使用的,不合理的索引
演示:索引
-
創建單列索引
CREATE INDEX idx_emp_ename ON emp(ename);
-
複合索引
CREATE INDEX idx_emp_job_sal ON emp(job,sal);
-
基於函數的索引
CREATE INDEX idx_emp_ename_upper ON emp(UPPER(ename));
-
修改索引
ALTER INDEX idx_emp_ename REBUILD;
-
刪除索引
DROP INDEX idx_emp_ename;