數(shù)據(jù)庫開發(fā)管理中的十條建議
因為主要管理數(shù)據(jù)庫平臺,所以和公司各個部門的相關(guān)技術(shù)人員都打過不少交道,然后從日常溝通中,了解到不少技術(shù)人員對數(shù)據(jù)庫的觀念,有正確的,有錯誤的,今天就列一些常見的錯誤觀念:
1,發(fā)現(xiàn)鎖表嚴重情況,會立刻想到改用Innodb,好像Innodb的行級鎖之后,就不會表鎖了,持這種觀念的開發(fā)人員不在少數(shù),其實他們不知道在做排序或是where條件復雜的情況下,一樣會產(chǎn)生表鎖。
2, 發(fā)現(xiàn)磁盤IO過大,會立刻想到分表,(這個方向是好的),但是一問,結(jié)果是分幾千張表,認為這樣之后,磁盤IO壓力就會下降,其實分表并不能解決磁盤IO,結(jié)合分庫+分表,然后分擔到不同的物理機器,這樣才能真正做到拆分,降低磁盤IO。
3, 大部分應用開發(fā)人員都會對表名定義的很通俗,如user,其實這樣做不好,因為在進行抓包分析時候,這種沒有特征的表名會導致故障排查變難。
4, 大部分應用開發(fā)人員不喜歡定時清理歷史數(shù)據(jù),只管存,不管清,導致項目數(shù)據(jù)量達到一定程度,再跑清理程序時候會比較影響服務。
5, 有些應用開發(fā)人員缺乏對表數(shù)據(jù)字段的控制,一個表放100多個字段,超級恐怖。
6,還有的應用開發(fā)人員干脆把表定義的超級多mediutext,拿數(shù)據(jù)庫當存儲用了,而且是冷熱數(shù)據(jù)都放一起,搞得偶很無語。
7,應用開發(fā)人員經(jīng)常會跑一些奇怪的join,嵌套子查詢的SQL,但是卻不去explain一下到底會有多大的掃描集,我見過有跑到上億掃描集的。
8,對MySQL的觸發(fā)器過于依賴,但是不考慮如果在誤操作之后的恢復操作,會產(chǎn)生業(yè)務邏輯的混亂。
9,很多技術(shù)開發(fā)人員一聽重要如收費相關(guān)的項目,就是想要用Innodb的事務機制做保障,其實真沒必要,我管的項目中收費讀書和英超收費頻道都是用myisam的,跑了快2年了,至今沒發(fā)現(xiàn)有用戶要告公司收費不準的問題。
10,很多開發(fā)人員喜歡在SQL語句使用Now()這樣的語句,其實應該盡量讓PHP程序去獲得時間。因為當你通過binlog進行誤操作恢復時候,你就能體會我說的意思了。
【編輯推薦】