索引最常說的作用就是可以讓服務器快速的定位到表的指定位置、但是這並不是索引唯一的作用,到目前位置可以看到,根據索引創建的數據結構的不同,索引也有一些其他的作用
最常見的B-Tree索引,按照順序進行存儲數據,所以MYSQL可以用來order by和group by。因為數據是有序的,所以B-Tree也可以將相關的列值都存儲在一起。因為索引存儲了實際的列值,所以就可以完全使用索引進行查詢(覆蓋索引)。由此得出索引有如下三個優點
(1)索引大大減少了服務器需要掃描的數據量。
(2)索引可以幫助服務器避免排序和臨時表
(3)索引可以將隨機IO變為順序IO
索引並不總是最好的工具。總的來說,只有索引能夠幫助存儲引擎快速查找到記錄帶來的好處大於其所帶來的額外工作時,索引才是有效的。對於非常小的表,大部分情況下簡單的全表掃描更高效。對於中到打星的表,索引就非常有效。但對於特大型的表,簡歷和使用索引的代價將隨之增長。這中情況下就需要區分出查詢需要的一組數據,而不是一條記錄一條記錄的匹配,這就是分區技術,在此不做贅述。
如果表的數量特別多的話,可以建立一個元數據信息表。用來查詢需要用到的某些特性。比如,執行哪些需要聚合多個應用分布在多個表的數據的查詢,則需要記錄哪個用戶的信息存儲在哪個表中的元數據,這樣在查詢時就可以直接忽略那些不包含指定用戶信息的表。
