1,原理:對要查詢的字段建立索引其實就是把該字段按照一定的方式排序;建立索引只對該字段有用,如果查詢的字段改變,這個索引也就無效了。
2,為什麼索引會增加速度:db在執行一條sql語句的時候,預設的方式是根據搜尋條件進行全表掃瞄,遇到匹配條件的就加入搜尋結果集合。如果我們對某一欄位增加索引,查詢時就會下去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢速度。
聚集索引和非聚集索引:
鏈結文章總結:
乙個加了主鍵的表,並不能被稱之為表。乙個沒加主鍵的表,它的資料無序的放置在磁碟儲存器上,一行一行的排列的很整齊, 跟我認知中的表很接近。如果給表上了主鍵,那麼表在磁碟上的儲存結構就由整齊排列的結構轉變成了樹狀結構,也就是平衡樹結構,換句話說,就是整個表就變成了乙個索引。
乙個表只能有乙個聚集索引,因為主鍵的作用就是把表的資料格式轉換成索引(平衡樹)的格式放置。
非聚集索引和聚集索引的區別在於, 通過聚集索引可以查到需要查詢的資料, 而通過非聚集索引可以查到記錄對應的主鍵值 , 再使用主鍵的值通過聚集索引查詢到需要的資料
不管以任何方式查詢表, 最終都會利用主鍵通過聚集索引來定位到資料,聚集索引(主鍵)是通往真實資料所在的唯一路徑。
索引的缺點:
事物都是有兩面的, 索引能讓資料庫查詢資料的速度上公升, 而使寫入資料的速度下降,原因很簡單的, 因為平衡樹這個結構必須一直維持在乙個正確的狀態, 增刪改資料都會改變平衡樹各節點中的索引資料內容,破壞樹結構, 因此,在每次資料改變時, dbms必須去重新梳理樹(索引)的結構以確保它的正確,這會帶來不小的效能開銷
每次給字段建乙個新索引, 欄位中的資料就會被複製乙份出來, 用於生成索引。 因此, 給表新增索引,會增加表的體積, 占用磁碟儲存空間。
索引的種類:
普通索引:index
唯一索引:unique index
主鍵索引:primary key
全文索引:fulltext
如何建立索引:
建立表:create table person (lastname varchar(30) , firstname varchar(30),address varchar(30) , age int(10));
建立索引:
索引被建立於已有的表中,它可使對行的定位更快速更有效。可以在**的乙個或者多個列上建立索引,每個索引都會被起個名字。使用者無法看到索引,它們只能被用來加速查詢。
注釋:更新乙個包含索引的表需要比更新乙個沒有索引的表更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常用於搜尋的列上面建立索引。
唯一的索引(unique index)
在**上面建立某個乙個唯一的索引。唯一的索引意味著兩個行不能擁有相同的索引值。
create unique index 索引名稱
on 表名稱 (列名稱)
「列名稱」 規定你需要索引的列。
簡單的索引
本例會建立乙個簡單的索引,名為 「personindex」,在 person 表的 lastname 字段:
create index personindex
on person (lastname)
如果您希望以降序索引某個列中的值,您可以在列名稱之後新增保留字 desc:
create index personindex
on person (lastname desc)
假如您希望索引不止乙個列,您可以在括號中列出這些列的名稱,用逗號隔開:
create index personindex
on person (lastname, firstname)
上述內容均收集自網路。
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
資料庫索引
索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...