2013年12月20日 星期五

在Django中 對多個資料欄位做索引

Django的ORM實在是很方便的一個東西,自從開始使用了之後,頭腦變好了,每次考試也都考一百分(誤),反而原本的SQL指令都忘的差不多了。不過在舊版的Django中有一個問題是,只能針對單一的資料欄位做index,無法對多個資料欄位做一個index。當然我們也可以手動在database中加入,但這樣就不符合懶人的做法。

而最近在做程式碼存取database的優化上,發現在單一列上做索引,database會依下列的邏輯去尋找資料:
首先,我們可以考慮在單個列上創建索引,比如firstname、lastname或者age列。如果我們創建firstname列的索引(ALTER TABLE people ADD INDEX firstname (firstname);),MySQL將通過這個索引迅速把搜索範圍限制到那些firstname='Mike'的記錄,然後再在這個「中間結果集」上進行其他條件的搜索:它首先排除那些lastname不等於「Sullivan」的記錄,然後排除那些age不等於17的記錄。當記錄滿足所有搜索條件之後,MySQL就返回最終的搜索結果。[1]
為了提高搜索效率,我們需要考慮運用多列索引。如果為firstname、lastname和age這三個列創建一個多列索引,MySQL只需一次檢索就能夠找出正確的結果! [1]
所以為了節省資料查詢的時間,發現在新版的Django中有加入了多行索引。使用方式可以在Model的Meta中加入一個index_together的欄位List即可。Django真是越來越方便了。

資料來源:
  1. MySQL索引分析和優化 | 六藝草堂

沒有留言:

張貼留言