一、為什么索引過(guò)的字段排序速度會(huì)很快
1、索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),本身是一個(gè)有序鍵值列表。這樣檢索的數(shù)據(jù)直接可以以順序列出。
2、通常來(lái)說(shuō),索引比要檢索或者排序的表本身小很多,足夠放在內(nèi)存中或者一次性讀取,確定了數(shù)據(jù)位置,直接讀取磁盤(pán)上相應(yīng)的數(shù)據(jù)塊,以減少磁盤(pán)I/O,對(duì)現(xiàn)在的計(jì)算機(jī)來(lái)說(shuō),磁盤(pán)I/O的開(kāi)銷(xiāo)很大。如果沒(méi)有索引,排序一般需要全表掃描,大大增加磁盤(pán)I/O。
但索引本身也是表,因此會(huì)占用存儲(chǔ)空間,一般來(lái)說(shuō),索引表占用的空間的數(shù)據(jù)表的1.5倍;索引表的維護(hù)和創(chuàng)建需要時(shí)間成本,這個(gè)成本隨著數(shù)據(jù)量增大而增大;構(gòu)建索引會(huì)降低數(shù)據(jù)表的修改操作(刪除,添加,修改)的效率,因?yàn)樵谛薷臄?shù)據(jù)表的同時(shí)還需要修改索引表。
延伸閱讀:
二、全文索引
FULLTEXT(全文)索引,僅可用于MyISAM和InnoDB,針對(duì)較大的數(shù)據(jù),生成全文索引非常的消耗時(shí)間和空間。對(duì)于文本的大對(duì)象,或者較大的CHAR類(lèi)型的數(shù)據(jù),如果使用普通索引,那么匹配文本前幾個(gè)字符還是可行的,但是想要匹配文本中間的幾個(gè)單詞,那么就要使用LIKE %word%來(lái)匹配,這樣需要很長(zhǎng)的時(shí)間來(lái)處理,響應(yīng)時(shí)間會(huì)大大增加,這種情況,就可使用時(shí)FULLTEXT索引了,在生成FULLTEXT索引時(shí),會(huì)為文本生成一份單詞的清單,在索引時(shí)及根據(jù)這個(gè)單詞的清單來(lái)索引。FULLTEXT可以在創(chuàng)建表的時(shí)候創(chuàng)建,也可以在需要的時(shí)候用ALTER或者CREATE INDEX來(lái)添加。