基礎呼叫評教系統介面,在執行程式時 我們看到iis的程序居高不下。
於是想了幾個方法進行資料庫的而優化嘗試。
第一 加索引。
索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。索引對於資料庫來說 就像目錄和整本書的關係一樣。有了資料庫索引,我們就可以先查詢目錄,然後快速的找到我們想要查詢的字段。如果想按特定學生的姓來查詢他或她,則與在表中搜尋所有的行相比,索引有助於更快地獲取資訊。
優點:建立索引可以大大提高系統的效能。第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。第四,在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。
當然,它也有不利的一面就是要注意的是,建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個所以索引檔案。
有了上面一些基礎的理論,我們開始改革。由於上課班學生的資料量將會特別大,超過50多萬條資料。再加索引時有幾個基本的原則就是
1加在經常搜尋的字段上面,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
2加在需要按某欄位排序的上面
3不加在值特別少的字段上面。例如 性別只有男女兩個值。
好在資料匯入之前我們就將索引加上了。再講50萬資料匯入之後,再檢視加索引時,就提示操作超時。。
第二 建立檢視
這兩天運算元據庫,對錶連線有了更深的理解。之前也寫過一篇建立檢視的部落格,歡迎大家移步瞅一眼再回來。3.0優化查詢-引入檢視
它沒有實際的物理紀錄也特別適合於多表連線瀏覽是使用。像我們表中,我們需要查詢乙個學生上的所有課程,型別和任課老師的姓名。我們需要根據學生去班級表中查詢班級id,再根據班級id 去上課班和行政班表中查詢對應的上課班id,有了上課班id之後可以根據它去查詢上課的老師id,然後根據上課的老師id 去查詢老師表裡面去查詢老師的姓名。繼續根據上課班id去查詢課程id,然後再去課程表裡面去查詢課程的id和名稱。最後,根據課程的id查到課程型別id之後去 課程型別表中查詢到課程的型別名稱。
如此乙個查詢結果才顯示出來。輕巧的是,用了檢視之後呢。所有的資訊都在乙個表中。直接查詢想要的字段。
只不過,在這裡考慮到如果我們將所有的學生的所有的課程放在乙個檢視裡面,乙個學期的資料量基本在30000*10以上。於是我們想到乙個折中的辦法就是,乙個檢視表中儲存該學生所在的班級中公共上的課。這樣就將原本50多條學生資料 縮小到一條班級資料。雖然多了一層需要根據學號去查詢班級資訊,但是也減少了查詢時間。
以上兩個優化是我們真正在這次的系統中操作和實踐的。關於資料庫的優化還有很多。
例如應用儲存過程。說到這,我們做了乙個實驗,再有50萬資料的時候,寫了一條低效率的查詢語句。
如下select * from dbo.basicteacherentities where teacherid not in (select teacherid from dbo.basiconclassentities where onclassid not in
(select onclassid from basiconclassstudententities where studentid ='193a83fc-558e-490c-b51f-04365a74a3be'))
結果它第一次查詢時用了11s,但是奇怪的是,當我第二次查詢時僅用了不到1s.換乙個studentid也一樣的不用等。
是不是和儲存過程原理是一樣滴?有待考究。
資料庫資料處理故事多
每年評教都會遇到資料匯入的一系列問題。從中收穫頗豐。這兩天別人總在問我,你們基礎出了什麼問題,為什麼總在導資料。資料沒問題,為了做足準備,我們需要將8期版的最全的資料整理到10期資料庫中。背景介紹 問題在於從8期版基礎系統到10期版基礎系統在資料庫設計方面有了很大的變化,例如10期學生表中存放著班級...
資料庫資料處理故事多
每年評教都會遇到資料匯入的一系列問題。從中收穫頗豐。這兩天別人總在問我,你們基礎出了什麼問題,為什麼總在導資料。資料沒問題,為了做足準備,我們需要將8期版的最全的資料整理到10期資料庫中。背景介紹 問題在於從8期版基礎系統到10期版基礎系統在資料庫設計方面有了很大的變化,例如10期學生表中存放著班級...
資料庫優化之例項和故事
資料庫優化之例項和故事 簡要 每一項技術都離不開資料庫,資料庫猶如人的大腦 密不可分,一旦出了問題 故障 停頓,卡主後果可想而知 潛心學習資料庫優化3個月,現在將學到的經驗分享給大家,希望能夠跟各位php大神分享和學習探索,如果有不對或者好的建議告知下 備份資料,是每個專案維護的日常工作 有利於資料...