程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL理解索引、添加索引的原則

MySQL理解索引、添加索引的原則

編輯:MySQL綜合教程

MySQL理解索引、添加索引的原則


[理解索引]

要理解索引,首先需要了解數據如何存儲在硬盤上。不同的存儲引擎采取的措施可能不一樣,比如MySQL客戶端默認采用MyISAM,該引擎為每個表創建單獨的文件。

不管是否為每個表創建了單獨的文件,操作系統從硬盤讀取數據到內存中總是以頁為單位的。因此,如果要獲取特定記錄,就需要把包含該記錄的頁讀入。

MySQL在獲取一條記錄的時候,可以采取逐條掃描或者索引訪問兩種不同的方法。假設采取第一種方法,要獲取id為1234的記錄,就需要順序地、依次地訪問過前1233條記錄。不僅如此,還需要考慮每次讀入數據頁的IO開銷。而如果采取索引,則可以根據索引指向的頁以及記錄在頁中的位置,迅速地讀取目標頁進而獲取目標記錄。

除了在獲取特定行的情況下使用hash十分快捷,在其它情況下都(默認)采用B樹來構建索引。B樹是平衡多叉樹,每個節點存放多少個值取決於值所占的空間,這與每一張數據頁存放多少條記錄與記錄信息量有關同理。節點中的值是以非降序進行排列的,節點中的值總是小於等於指向它的結點中的值。

MySQL使用B樹構造索引的情況下,是由葉子指向具體的頁和記錄的。並且一個葉子有一個指針指向下一個葉子。

使用索引需要注意:

⑴只對WHERE和ORDER BY需要查詢的字段設置索引,避免無意義的硬盤開銷;

⑵組合索引支持前綴索引;

⑶更新表的時候,如增刪記錄,MySQL會自動更新索引,保持樹的平衡;

一,索引的重要性

  索引用於快速找出在某個列中有一特定值的行。不使用索引,MySQL必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數據文件的中間,沒有必要看所有數據。注意如果你需要訪問大部分行,順序讀取要快得多,因為此時我們避免磁盤搜索。

索引分三類:

index ----普通的索引,數據可以重復

unique ----唯一索引,唯一索引,要求所有記錄都唯一

primary key ----主鍵索引,也就是在唯一索引的基礎上相應的列必須為主鍵


MySQL 中會對 <,<=,=,>,>=,BETWEEN,IN 以及不以% _ 開頭的like 語句使用索引。

二,原則

   1,單表數據太少,索引反而會影響速度

2,where後的條件,order by ,group by 等這樣過濾時,後面的字段最好加上索引。根據實際情況,選擇PRIMARY KEY、UNIQUE、INDEX等索引,但是不是越多越好,要適度

  3,聯合查詢,子查詢等多表操作時關連字段要加索引

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved