跟著專案學sql(五) 索引
開頭還是百度百科中的【索引】相關術語
在關係資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
索引提供指向儲存在表的指定列中的資料值的指標,然後根據您指定的排序順序對這些指標排序。資料庫使用索引以找到特定值,然後順指標找到包含該值的行。這樣可以使對應於表的SQL語句執行得更快,可快速訪問資料庫表中的特定資訊。
當表中有大量記錄時,若要對錶進行查詢,第一種搜尋資訊方式是全表搜尋,是將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量
資料庫系統時間,並造成大量磁碟I/O操作;第二種就是在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過儲存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。
通過閱讀上面一大段術語,我們可以得出三點資訊:
1)、對錶進行查詢有兩種方式:全表搜尋和索引
2)、當表中有大量記錄時,用全表掃描會消耗大量資料庫系統時間和磁碟I/O,因此要使用索引。
3)、索引是資料庫表中一列或多列的值進行排序的一種儲存結構,至少包含索引值和ROWID,資料庫使用索引以找到特定值,最後通過儲存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。
新聞表(News)
1、全表搜尋和索引
新聞表中的id上有主鍵索引,而其他欄位沒有索引。而系統最關鍵的功能如下:
select 欄位 from news where id=***
因此,在大部分情況下,關係型資料庫中,我們總會在關鍵功能中用到索引,無關資料量得多少。
使用者表中有5條測試資料,我們檢視用它來對比全表搜尋和索引,發現時間全是0,並沒有看出任何區別:
為此,我們在新聞表中插入2W條測試資料,格式如下
分別查詢id為【空字串】的新聞 、title為【空字串】的新聞,對比結果如下:
我用的裝置硬碟陳舊,所以對比結果非常明顯,我們把正在執行的IDE、QQ、360、瀏覽器等等全部退出,來看下結果:
根據以上資訊得出四點結論
1)資料量小的情況下,全表掃描和索引差距不大。
2)提升機器效能,優化了查詢,機器配置越高,查詢速度越快。
3)在相同的機器配置下,索引明顯優於全表搜尋。
現實是,我並不能奢望換啥配置,但我的需求就是在查詢的同時,還可以寫程式碼、看視訊、下載、聊qq。在使用索引的情況下,查詢還是可以接受的,但全表掃描速度過慢,並且導致我在看視訊的時候總是特別卡。