我的第一份外包经历及所得
?
?? 今年的6月份,我找到了我現在的公司,還不錯,公司性質是軟件外包,我也非常興奮的來到了我的第一個客戶工作。外包的人員和客戶公司內部的人員當然在分工上會有很多不同的地方,因為外包人員是有時間的,所有不會安排特別費時,而且熟悉起來特別難的模塊,所以要想學習客戶環(huán)境中的優(yōu)點,就要靠自己的努力了,這里我說下我這6個月的所得。
?? 6月份之前我的工作都不是特別固定,二年半的時間換了三家公司,可以說一年一次吧。當中的原因我就不多說了,家家有本難念的經。回想在客戶這邊的6個月,收獲那是一個大啊,個人認為,嘿嘿。
?? 第一:數據庫優(yōu)化方面的進步;
???????? 記的在面試的時候,有很多面試B/S的技術員都會問你是否在數據優(yōu)化的經驗,當時記的問我索引的分類,以及使用場合的主要區(qū)別,我當時實在沒怎么用,所有只能憑想象回答了幾句。對索引的應用少是因為以前的公司數據量不大,很少遇到性能瓶頸的問題,還好在客戶這邊有這樣一個機會,雖然是一個老系統(tǒng),但數據那是一個大啊,動不動就是上千萬的,我想這下機會來了,正好由于業(yè)務需求的調整,要對原有查詢邏輯做修改,這就要考慮重新創(chuàng)建聚集索引,和如何優(yōu)化非聚集索引的問題。
????????? 業(yè)務需求:按離開時間leaveDate,和訂單狀態(tài):state來查詢訂單表orders同時關聯(lián)會員表member,按離開時間leaveDate排序,查詢條件是:leaveDate,代理ID:proxyID,訂單狀態(tài)。兩者數據量均在600百萬以上,關聯(lián)的條件為會員ID和代理ID,并創(chuàng)建了索引。
? ? ? ? ? 表結構說明:
??????????????????????? 1:訂單表,有大約十多個字段,其中包含:生成時間:createDate,離開時間leaveDate,會員ID等字段;會員ID,createDate上有聯(lián)合聚集索引
? ? ? ? ? ? ? ? ? ? ? ? 2:會員表:字段大約三十以上,包含會員ID,代理ID等。 在會員ID和代理ID上創(chuàng)建了一個聯(lián)合索引。
? ? ? ? ? 兩表數據量說明:
??????????????????????? 1:訂單表,1200萬以上,且每天增加;
? ? ? ? ? ? ? ? ? ? ? ? 2:會員表:600萬以上,變化速度不是太大。
????????? 我的第一個做法:因為查詢中有一個order by "createDate",所有我想在這個時間字段上創(chuàng)建聚集索引,但效果不明顯;
????????? 我的第二個做法:因為條件中有一個"leaveDate",所以在leaveDate上創(chuàng)建聚集索引,效果還行。
????????? 我的第三個做法:因為條件中有按訂單狀態(tài)來查詢,何不把"leaveDate"和"訂單狀態(tài)"建立聯(lián)合聚集索引呢,事實說明非常有效果;
????????? 我的第四個做法:因為訂單表要和會員表關聯(lián),而這個會員表也不少,600百多萬,這樣大表關聯(lián),速度自然快不了,因為會員表字段特別多,而且數據量大,關聯(lián)時,只用到會員表的三個字段,會員ID,代理ID,會員的姓名,關聯(lián)時的條件為會員ID和代理ID,自然在這兩個字段上已經創(chuàng)建了索引。所有我想通過索引視圖來解決這個問題,創(chuàng)建一個只包含這三列的索引視圖,發(fā)現效果一般;雖然數據列少了,但數據行還是那么多。
????????? 我的第五個做法:修改會員表的會員ID和代理ID的索引,應用SQL05的特性include把用戶姓名包含進索引中,形成覆蓋索引,這樣一次索引查找就OK,這樣做的好處就是改動最小,而且效果不錯。
????????? 我的第六個做法:說服業(yè)務,將原來的排序"createDate"變成已經創(chuàng)建了聚集索引的"leaveDate",節(jié)省了不少IO;
???????? 小結:經過我多次的強奸,終于有所成效,這其中的做法并不是我一個人想出來的。
???????????????? 1:其實第二個做法,在條件的"leaveDate"上創(chuàng)建聚集索引是園友zping告訴我的,當時我并不清楚聚集索引適用于這種可能存在重復鍵的列,只知道自增的列適合創(chuàng)建聚集索引。因為我們比較習慣的利用自增的列當成主鍵,而這種情況下,主鍵就已經是一個聚集索引了。
???????????????? 2:放棄索引視圖的做法是通過和客戶這邊的DBA討論的結果,非常感謝DBA。理由如下:
???????????????????? 第一:索引視圖只縮小了列的數量,數據行還是沒有減少的。所有效果不太明顯,經我的證明,也就提高15%左右。
????????????????????? 第二:索引視圖需要額外的系統(tǒng)開銷,比起提高的性能,作用不明顯。
???????????????? 3:應用include是我從DBA翻譯的SQL2005技術內幕中發(fā)現的,它讓我知道了什么叫覆蓋索引。
????????? 總之上面就是我的第一次SQL優(yōu)化經歷,在工作過程中寫下來十多篇關于數據庫的文章,下面再次厚著臉皮show一下。
?????????? 1:SQL2005性能分析一些細節(jié)功能你是否有用到?
? ? ? ? ?? 2:SQL2005性能分析一些細節(jié)功能你是否有用到?(二)
?????????? 3:SQL2005性能分析一些細節(jié)功能你是否有用到?(三)
? ? ? ? ?? 4:SQL開發(fā)中容易忽視的一些小地方(一)
?????????? 5:SQL開發(fā)中容易忽視的一些小地方(二)
? ? ? ? ?? 6: SQL開發(fā)中容易忽視的一些小地方( 三)
? ? ? ? ?? 7:SQL開發(fā)中容易忽視的一些小地方(四)
?????????? 8:SQL開發(fā)中容易忽視的一些小地方(五)
? ? ? ? ?? 9:如何應付表數據過大的查詢問題?(如何盡量避免大表關聯(lián))
?????????? 10:怎樣才能充分利用SQL索引
? ? ? ? ?? 11:select查詢原理
?????????? 12:通用分頁存儲過程真的有注入漏洞嗎??
?
?
?
??? 第二:開發(fā)工具的應用,在開發(fā)時,有些小工具的應用往往會使你的工作帶來非常大的效率提高,下面的推薦下我應用過的工具:
??????????? 1:nant工具,這是我在客戶這邊網站打包時應用的,它的應用可以看這篇文章。
? ? ? ? ? ? ? ?? 小工具大智慧
??????????? 2:UE,文本編輯器,比起傳統(tǒng)的記事本強多了。
??????????? 3:beyondCompare,文件比較器,文件的比較,非常精確。
??????????? 4:reg gate,SQL幫助工具。
??????????? 5:log4net,非常強大的日志組件,配置簡單而且實用,強烈推薦。
??????????????? log4net日志組件經驗分享
??? 第三:新技術的學習,后期我接觸了一個應用了LINQ的站點,從而學習了不少LINQ基礎知識,可以參考下面的文章。
? ? ? ? ? ? 1:LINQ學習中關于null相關的問題及解決方案
? ? ? ? ? ? 2:LINQ TO SQL中的selectMany
? ? ? ? ? ? 3:LINQ TO SQL 中的join
? ? ? ? ? ? 4:LINQ TO SQL 中的group
? ? ? ? ? ? 5:LINQ TO SQL中的select
? ? ? ? ? ? 6:轉載:LINQ to SQL更新數據庫操作
? ?? 第四:素質的提升,在客戶中明白了這樣的一句話:你幫助別人,你得到的會更多??蛻暨@邊的同事和領導那個態(tài)度好的沒法說,什么不明白了非常樂意指點你。并不是每個人都是全才,我是一個變通的程序員,所以需要得到大家的幫助,同樣我也有好的地方值得大家學習,哈哈。好好學習,天天向上。
? ?? 第五:多余的時間讓我有空學習設計模式,因為我有一部分時間就是做網站打包,什么是網站打包,我就不說了,不太好說明白,這期間我學習的文章如下:
?????????? 1:老生常談:代理模式
? ? ? ? ?? 2:老生常談:組合模式
? ? ? ? ?? 3:老生常談:模板方法模式
? ? ? ? ?? 4:老生常談:建造者模式(設計模式到底離我們有多遠)
? ? ? ? ?? 5:老生常談:外觀模式
? ? ? ? ?? 6:老生常談:單件模式
? ? ? ? ?? 7:老生常談:抽象工廠模式
? ? ? ? ?? 8:老生常談:裝飾者模式
???? 總結:在客戶的半年,收獲了不少知識和經驗,和周圍的同事積累了不少感情,人都是有感情的,外包到期了多少有點不舍之情,但路還是要走的,希望我們大家都能共同進步。
?
總結
以上是生活随笔為你收集整理的我的第一份外包经历及所得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RMI和WebService
- 下一篇: 对对象类型和调用方法属性进行存储以提升反