17.數據庫對象:索引

數據庫對象:索引(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;

合理使用索引提升查詢效率

  1. 爲經常出現在WHERE子句中的列創建索引

  2. 爲經常出現在ORDER BY、DISTINCT後面的字段建立索引,如果建立的是複合索引,索引的字段順序要和這些關鍵字後面的字段順序一致

  3. 爲經常作爲表的連接體條件的列創建索引

  4. 不要再經常做DML操作的表上建立索引

  5. 不要再小表上建立索引,小表指的是數據量小的

  6. 限制表上的索引數目,索引並不是越多越好

  7. 刪除很少被使用的,不合理的索引

演示:索引

  • 創建單列索引

    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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章