MySQL數據庫中索引的使用


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;

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM