SQL優化-索引 (三)只要建立索引就能顯著提高查詢速度

2、只要建立索引就能顯著提高查詢速度

  事實上,我們可以發現上面的例子中,第2、3條語句完全相同,且建立索引的字段也相同;不同的僅是前者在fariqi字段上建立的是非聚合索引,後者在此字段上建立的是聚合索引,但查詢速度卻有着天壤之別。所以,並非是在任何字段上簡單地建立索引就能提高查詢速度。

  從建表的語句中,我們可以看到這個有着1000萬數據的表中fariqi字段有5003個不同記錄。在此字段上建立聚合索引是再合適不過了。在現實中,我們每天都會發幾個文件,這幾個文件的發文日期就相同,這完全符合建立聚集索引要求的:“既不能絕大多數都相同,又不能只有極少數相同”的規則。由此看來,我們建立“適當”的聚合索引對於我們提高查詢速度是非常重要的。

  3、把所有需要提高查詢速度的字段都加進聚集索引,以提高查詢速度

  上面已經談到:在進行數據查詢時都離不開字段的是“日期”還有用戶本身的“用戶名”。既然這兩個字段都是如此的重要,我們可以把他們合併起來,建立一個複合索引(compound index)。

  很多人認爲只要把任何字段加進聚集索引,就能提高查詢速度,也有人感到迷惑:如果把複合的聚集索引字段分開查詢,那麼查詢速度會減慢嗎?帶着這個問題,我們來看一下以下的查詢速度(結果集都是25萬條數據):(日期列fariqi首先排在複合聚集索引的起始列,用戶名neibuyonghu排在後列)

  (1)select gid,fariqi,neibuyonghu,title from Tgongwen

  where fariqi>'2004-5-5'

  查詢速度:2513毫秒

  (2)select gid,fariqi,neibuyonghu,title from Tgongwen

  where fariqi>'2004-5-5' and neibuyonghu='辦公室'

  查詢速度:2516毫秒

  (3)select gid,fariqi,neibuyonghu,title from Tgongwen

  where neibuyonghu='辦公室'

  查詢速度:60280毫秒

  從以上試驗中,我們可以看到如果僅用聚集索引的起始列作爲查詢條件和同時用到複合聚集索引的全部列的查詢速度是幾乎一樣的,甚至比用上全部的複合索引列還要略快(在查詢結果集數目一樣的情況下);而如果僅用複合聚集索引的非起始列作爲查詢條件的話,這個索引是不起任何作用的。當然,語句1、2的查詢速度一樣是因爲查詢的條目數一樣,如果複合索引的所有列都用上,而且查詢結果少的話,這樣就會形成“索引覆蓋”,因而性能可以達到最優。同時,請記住:無論您是否經常使用聚合索引的其他列,但其前導列一定要是使用最頻繁的列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章