什麼是索引?為什麼要建立索引?
索引,其實就是目錄。
索引,用於快速找出在某個列中有某個特定值的行。
不使用索引,mysql必須從第一條記錄開始查詢整張表,直到找出相關的行,那麼表越大,查詢資料所花費的時間就越多。
假如表中查詢的列有乙個索引(目錄),mysql能夠快速定位到達乙個位置去搜尋資料檔案,而不必查詢所有資料,那麼將會節省很大一部分時間。
舉個栗子:
假如,有一張person表,其中有2w條記錄,記錄著2w個人的資訊。
有乙個phone的字段記錄每個人的**號碼,現在想要查詢出**號碼為18991661323的人的資訊。
如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條資訊為止。
如果有了索引,那麼會將該phone欄位,通過一定的方法進行儲存,好讓查詢該字段上的資訊時,能夠快速找到對應的資料,而不必再遍歷所有2w條資料了。
其中mysql中的索引的儲存型別有兩種:btree、hash。 也就是用樹或hash值來儲存該欄位,要知道其中詳細是如何查詢的,就需要會演算法知識。
我們現在只需要知道索引的作用,功能是什麼就行。後面的隨筆我們會詳細講解各種索引模型。
mysql中索引的優點和缺點和使用原則
(1)優點
1、所有的mysql列型別(字段型別)都可以被索引,也就是可以給任意字段建立索引。
2、大大加快資料的查詢速度。
(2)缺點
1、建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加
2、索引也需要佔空間,我們知道資料表中的資料也會有最大上線設定的,如果我們有大量的索引,索引檔案可能會比資料檔案更快達到上線值
3、當對表中的資料進行增加、刪除、修改時,索引也需要動態的維護,降低了資料的維護速度。
(3)使用原則
通過上面說的優點和缺點,我們應該可以知道,並不是每個字段度設定索引就好,也不是索引越多越好,而是需要自己合理的使用。
1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該建立索引,
2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。
3、在一同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在乙個欄位上不同值較多可是建立索引。
索引的分類
尤其注意,索引是在儲存引擎中實現的,也就是說不同的儲存引擎,可能會使用不同的索引。
myisam和innodb儲存引擎:只支援btree索引, 也就是說預設使用btree,不能夠更換。
memory/heap儲存引擎:支援hash和btree索引
1、索引我們分為四類來講:單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引)
1.1、單列索引:乙個索引只包含單個列,但可以為乙個表中的多個列分別建立索引。
1.1.1、普通索引:
mysql中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點。
1.1.2、唯一索引:
索引列中的值必須是唯一的,但是允許為空值,
1.1.3、主鍵索引:
是一種特殊的唯一索引,不允許有空值。
1.2、組合索引
在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合。這個如果還不明白,等後面舉例講解時在細說
1.3、全文索引
全文索引,只有在myisam引擎上才能使用,只能在char、varchar、text型別欄位上使用全文索引。
全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該欄位所屬的記錄行,比如有"你是個程式設計師,c++程式設計師 ..." 通過程式設計師,可能就可以找到該條記錄。
1.4、空間索引
空間索引是對空間資料型別的字段建立的索引,mysql中的空間資料型別有四種,geometry、point、linestring、polygon。
在建立空間索引時,使用spatial關鍵字。
要求,引擎為myisam,建立空間索引的列,必須將其宣告為not null。
good good study, day day up.
順序 選擇 迴圈 總結
mysql索引基礎 Mysql 索引基礎
什麼是索引?為什麼要建立索引?索引,其實就是目錄。索引,用於快速找出在某個列中有某個特定值的行。不使用索引,mysql必須從第一條記錄開始查詢整張表,直到找出相關的行,那麼表越大,查詢資料所花費的時間就越多。假如表中查詢的列有乙個索引 目錄 mysql能夠快速定位到達乙個位置去搜尋資料檔案,而不必查...
mysql索引基礎
1.建立索引 alter table table name add index index name column list alter table table name add unique index name column list alter table table name add pri...
MySQL索引基礎
索引是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的效能非常關鍵。然而索引經常被誤解,好的索引能夠輕易將查詢效能提高幾個數量級,糟糕的索引則會導致各種問題。看一本書的時候,一般會先看書的目錄,然後找到對應的頁碼。在mysql中,儲存引擎用類似的方法使用索引,先在索引中找到對應值,然後根據匹配...