qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          數(shù)據(jù)庫優(yōu)化的最佳實踐

           在許多很好的例子,技術(shù)和方法被世界上最好的數(shù)據(jù)庫性能專家所高薦。我們將討論提高數(shù)據(jù)庫性能的最常用的方法,而不是評論或建議任何特定的工具或技術(shù)。
            1)謹慎而有效地使用索引
            選擇合理的索引(前綴性及可選性)、刪除沒有用的索引。
            2)使用規(guī)范化,但不要使用過頭
            規(guī)范化(至少是第三范式)是一個易于理解且標準的方法。然而,在有些情況下,你可能希望違反這些規(guī)則。查詢表通常是規(guī)范化的產(chǎn)物,也就是說,你創(chuàng)建了一個特殊的表,這個表包含了在其他表中被頻繁使用的相關(guān)信息的列表。然而,當使用那些經(jīng)常被訪問且分布有限(僅有或有限的行數(shù)擁有小值)的查找表時,會使系統(tǒng)性能降低。在這種情況下,每次你使用查詢信息,它們必須使用join以獲取完整數(shù)據(jù)。join的開銷很大,而且頻繁訪問會使開銷隨著時間逐漸增加。為了減少這種潛在的性能問題,可以使用枚舉字段存儲數(shù)據(jù),而不是使用查找表存儲數(shù)據(jù)。例如,可以使用枚舉字段存儲頭發(fā)彩色值,而不是創(chuàng)建表來存儲頭發(fā)顏色值,這樣還可以避免使用join.
            3)使用正確的存儲引擎
            mysql的最強大的功能之一是它支持不同的存儲引擎,存儲引擎管理如何存儲和恢復數(shù)據(jù)。mysql支持多個存儲引擎,每個存儲引擎具有獨特的功能和用途,可以使數(shù)據(jù)庫設(shè)計通過使用最合適他們的應(yīng)用程序的存儲引擎來改善數(shù)據(jù)庫系統(tǒng)的性能。例如,如果有一個這樣的環(huán)境:使用事務(wù)控制高度活躍的數(shù)據(jù)庫,請選擇一個合適這個情況的存儲引擎(mysql的有些存儲引擎不支持事務(wù)),你還可能會發(fā)現(xiàn)這樣的視圖和表,它們常常被查詢但是幾乎不被更新(例如查找表),在這種情況下,你可能希望使用存儲引擎將這些數(shù)據(jù)存儲在內(nèi)存中,以便快速訪問它們。
            InnoDB存儲引擎支持事務(wù),在需要事務(wù)支持時,通常應(yīng)該選擇這個存儲引擎,它是Mysql中目前唯一事務(wù)性的引擎。很多第三方存儲引擎支持事務(wù),但是僅有InnoDB有"開包即用"選項。有趣的是,InnoDB中所有的索引都是B-trees,在這個B樹中索引記錄被存儲在樹的葉子項,InnoDB適用于高性能和事務(wù)處理環(huán)境。
            MyISAM存儲引擎是Mysql默認引擎,如果你在create語句中省略了engine選項,那么默認使用這個引擎。MyISAM經(jīng)常在數(shù)據(jù)倉庫、電子商務(wù)和企業(yè)應(yīng)用中使用。MyISAM使用高級緩存和索引機制提高數(shù)據(jù)檢索速度,另外,當各種應(yīng)用程序需要快速檢索數(shù)據(jù)而不需要事務(wù)時,MyISAM將是很好的選擇。
            Blackhole存儲引擎是非常有趣的,它并不存儲任何東西。實際上,正如它的名字所言-存儲進去的數(shù)據(jù)永遠還會返回。Blackhole存儲引擎有個特殊的用途,如果啟用了二進制日志SQL命令將被寫入這個日志,這時,Blackhole存儲引擎被當做復制拓撲中的中繼代理使用。
            Memory存儲引擎(有時被稱為HEAP)是內(nèi)存中的存儲器,它使用哈希機制頻繁檢索被使用過的數(shù)據(jù),這樣可以更快地檢索,它訪問數(shù)據(jù)的方式與其他存儲引擎類似,但是數(shù)據(jù)存儲在內(nèi)存中,并且只在mysql會話有效。當關(guān)機時,這些數(shù)據(jù)被刷新并刪除掉。Memory存儲引擎通常用于以下情況:靜態(tài)數(shù)據(jù)被頻繁使用且很少被改變(如查找表).
            4)通過Query Cache使用視圖來加速結(jié)果
            5)使用約束
            6)使用explain、analyze、optimize
            這些工具在診斷和調(diào)優(yōu)時很重要,在不發(fā)生錯誤的前提下經(jīng)常使用它們,但是請小心使用。具體來說,當analyze、optimize有意義且不是作為定期的預定的事件時使用它們。我們發(fā)現(xiàn)有些系統(tǒng)管理員晚上使用這些命令,但是一般情況下,這樣做是不值得的,并且會產(chǎn)生不必要的表副本。顯然,強制系統(tǒng)定期復制數(shù)據(jù)浪費時間,并會導致操作過程中的訪問有限。

          posted on 2013-12-24 11:51 順其自然EVO 閱讀(359) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 嘉义市| 舟曲县| 小金县| 迁安市| 潮安县| 金湖县| 四会市| 沿河| 深州市| 阳城县| 闵行区| 四川省| 大埔县| 武定县| 华阴市| 黄大仙区| 潮安县| 济宁市| 登封市| 吉安县| 平潭县| 长白| 左权县| 班戈县| 东乡县| 密云县| 钟山县| 松阳县| 中阳县| 商河县| 丁青县| 务川| 都昌县| 汉源县| 淳化县| 巩留县| 长沙市| 壤塘县| 开江县| 百色市| 陕西省|