這是一個比較難以處理的問題,但是你可以從這里得到很多好處。很多情況下,都是可以使用臨時表的,比如:在避免兩次從一個大型表格里查詢時。在連接兩個表格的時候,你也可以使用臨時表來大大降低處理程序所占用的內(nèi)存。如果你必須把一個表合并到一個大型表格中,你可以通過先從大型表中檢索出你所需要的數(shù)據(jù)合并到臨時表中,然后用把這些數(shù)據(jù)合并的方法來優(yōu)化命令。如果在進(jìn)程中,你必須對同一個表進(jìn)行同樣的合并的時候,臨時表是一個非常有用的方式。
6.必須預(yù)存數(shù)據(jù)。
這是我比較喜歡的一個話題,因為這是一個比較容易被忽略的老方法。如果你有一個報告或者一個進(jìn)程,它們需要向一個大型表里做類型的合并,這時,如果你能通過提前合并表格或者是插入表格的方法來預(yù)存數(shù)據(jù),這將對你的操作大大有益。
一般情況下,你是不能使用這個技巧的。但是,如果你可以,你會發(fā)現(xiàn)這將是一個非常完美的節(jié)約服務(wù)器資源的方法。
注意到這樣的問題,一般開發(fā)者通過關(guān)注查詢本身而避開這樣的合并問題,創(chuàng)建一個只可見的合并,以致于不能一而再,再而三地定義它們的合并環(huán)境。通過預(yù)存數(shù)據(jù),你只需執(zhí)行一次合并,同時別人也避免了大型的合并。我非常喜歡用這種方法,大多數(shù)情況下,有很多流行表總是執(zhí)行合并,所以沒有任何理由說不能預(yù)存數(shù)據(jù)。
7,分批地刪除和更新。
還有一個常被忽略的簡單技巧。如果你的操作錯誤,從一個大型表里刪除和更新大量的數(shù)據(jù)將是一個噩夢。問題是這兩個命令執(zhí)行起來就像是一個命令,如果你需要放棄他們,或者如果你在工作的時候系統(tǒng)發(fā)生了什么事情,系統(tǒng)就必須從頭開始所有命令的執(zhí)行。這會花費(fèi)很多時間。這些操作也會妨礙別的命令的執(zhí)行,甚至?xí)蔀檎麄€系統(tǒng)的瓶頸。
解決這個問題的辦法是,小批量地刪除和更新數(shù)據(jù)。可以通過兩種方式來解決這個問題:一,如果命令的執(zhí)行因為任何原因被終止,那就必須有一小部分行從頭開始執(zhí)行,所以數(shù)據(jù)庫恢復(fù)得將會快得多。二,當(dāng)更少的數(shù)據(jù)被存在了硬盤上時,別的命令也可以做一些工作,所以并發(fā)性就被大大地優(yōu)化了。
按照這個指示,很多開發(fā)者企圖在一天之內(nèi)把這些刪除和更新操作完成。但是,這并不是總是正確的,特別是當(dāng)你在存檔的時候。只要你需要,你可以盡可能地擴(kuò)展這些炒作,而且這些小批量的數(shù)據(jù)也可以幫助你完成這些。如果你可以花費(fèi)更多的時間來做更多的操作,那么就花費(fèi)一些多余的時間吧,同時不要讓你的系統(tǒng)停下來。
享受更快的SQL。
當(dāng)你寫代碼來優(yōu)化你的SQL性能的時候,在任何你可以遵守這些事項的時候,就去遵守它們。但是,請分別評價這些解決方法來看看哪種方法是最有效的,可以說沒有一個萬能的或者是固定的方法來解決這些問題。你將會發(fā)現(xiàn)很多竅門都是和ikyi提高并發(fā)性,并可以讓整體運(yùn)行通暢的。同時,你也會注意到這些物理實現(xiàn)會從這個供應(yīng)商傳遞到下一個供應(yīng)商,這些概念和問題將會存在每一個SQL平臺上。

分享到

hanrui

相關(guān)推薦