什麼是索引: SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間。 聚集索引:該索引中鍵值的邏輯順序決定了表中相應行的物理順序。 非聚聚索引:該索引中索引的邏輯順序與磁碟上行的物理存儲順序不同。 下麵舉兩個簡單的例子: ...
什麼是索引:
SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間。
聚集索引:該索引中鍵值的邏輯順序決定了表中相應行的物理順序。
非聚聚索引:該索引中索引的邏輯順序與磁碟上行的物理存儲順序不同。
下麵舉兩個簡單的例子:
我們拿出一本新華字典,它的目錄實際上就是一種索引:非聚集索引。我們可以通過目錄迅速定位我們要查的字。而字典的內容部分一般都是按照拼音排序的,這實際上又是一種索引:聚集索引。
創建索引的好處:
1、 加快經常被搜索欄位的搜索速度。
2、利用索引的唯一性來控制記錄的唯一性
用索引的壞處:
索引至少會帶來如下的額外的創建時間額外的存儲空間(單列索引占原表5%至15%空間,想象一下如果為一個表創建三四個索引)額外的維護時間這一切只為了一個目的:減少在小範圍查詢的情況下的query time。如果是查詢 返回1%以上的數據,這情況下索引的意義不大。
什麼時候使用索引:
如果某個欄位,或一組欄位會出現在一個會被頻繁調用的where子句中,那麼它們應該是被索引的,這樣會更快的得到結果。同時,唯一索引的用途前面提到了,恰當的使用它們,避免意外的發生。我個人不推薦使用全文索引,尤其對於漢字來說,全文索引的開銷太大了,我寧可選擇搜索引擎提供的站內搜索功能。雖然搜索引擎的收錄不是很及時,但是我覺得也不是不能接受。再說一次,我覺得應該儘量在插入/修改/刪除數據的時候多做一些事情,相對來說,這些操作不那麼頻繁,而且單次操作的數據量也更小。不要將壓力都留給查詢語句。
本人博客地址:Mysql資料庫學習筆記之資料庫索引(index)