資料庫 基礎知識 插入優化

2021-07-10 05:01:39 字數 2869 閱讀 5580

插入資料,是

mysql

資料庫

的基本任務。不過不要小看這個插入資料的動作。在資料庫效能優化上,可以在這上面做很大的

文章

。如果利用mysql作為一些即時資訊化管理軟體的後台資料庫,如erp系統。由於其資料插入的作業非常頻繁,而且對效能的要求也比較高。此時資料庫管理員就需要採取措施來提高資料插入的效率。針對這塊內容,筆者認為資料庫工程師在應用程式與資料庫設計時,需要注意如下幾個細節問題。

細節一:同時插入多行記錄時,宜採用一條insert語句

在資料插入時,往往需要同時往乙個表中插入多條資料。如以erp系統的採購訂單為例。使用者在前台客戶端錄入採購訂單時,有可能需要向同乙個**商同時採購多個原材料。此時在資料庫中,就需要往乙個**中同時插入多條記錄。在插入資料時,可以通過兩個方式實現。一是採用多條insert語句,每個insert語句插入一條記錄。另外一種方式是只採用一條insert語句,插入多條語句。採取這兩種方式,有什麼差異呢?

從語言編寫的角度看,第一種方式比較清楚明了。但是從資料插入速度的角度來看,第二種方式效能比較好。特別是一次性插入一兩百條記錄時,兩者所需要的時間會相差一倍以上。如下圖所示,就是使用一條insert語句插入多條記錄的舉例。

總之在資料插入時,需要注意使用帶有多個值列表的insert語句一次插入多行記錄要比使用乙個單行插入語句快很多。而且隨著行數的增加,這個差異會越來越大。在資料庫設計時,如果有設計到同時插入多條資料的紀錄,如通過客戶端匯入基礎資料、通過前置單據自動生成相關單據,這些作業都會遇到向某個表中一次性插入多條記錄的情況。此時從提高資料庫效能的角度考慮,筆者建議採用乙個insert語句同時插入多條記錄的方式。雖然說編寫語言的時候會增加複雜程度,但是這點投資與資料庫效能優化相比而言,是值得的。

細節二:批量插入記錄時,建立採用load date infile語句

有時候可能需要往mysql資料庫中批量匯入資料。如在erp系統初始化過程中,需要將產品資料匯入到系統中。實施顧問一般會要求使用者根據他們的格式準備好相關的資料,然後利用匯入作業,將這些資料一次性匯入到資料庫中。雖然這個匯入作業是通過前台客戶端來完成的,但是最終仍然是反映在資料庫中。

針對這種批量資料的匯入,資料庫又提供了兩種方式。一是上面所介紹的,採用乙個insert語句插入多行記錄的方式;另外一種就是採用load date infile的方式。這兩種方式有什麼差異呢?load date infile顧名思義,就是從乙個檔案中匯入資料。為此如果採用這種方式的話,使用者需要預先準備乙個固定格式的檔案。而insert語句的話,沒有這個要求,其可以直接利用其他作業中獲得的資料。從這個角度講,如果插入的紀錄數比較少(如在一百條左右)或者通過系統互動來獲得資料,此時比較適合使用insert語句。從效能的角度考慮,通常情況下使用load date infile語句的方式插入資料要比使用insert語句速度快10到20倍。為此如果插入的資料量比較多,如期初匯入資料時可能會有超過上萬條的記錄,此時使用load date infile的方式能夠取得比較好的效能。

細節三:插入延遲,提高插入操作對系統的不利影響

在某些情況下,使用者對插入資料的即時性要求可能並不是很高,此時就可以考慮通過插入延遲特性,來減少插入操作對系統資源的耗用。筆者再以erp系統為例。在erp系統中,有乙個安全庫存管理的作業。如果啟用了這個作業的話,那麼系統會在每天乙個固定的時刻,分析賬上的庫存資料與安全庫存之間的關係。如果發現庫存數量低於安全庫存時,系統就會自動生成一張請購單,將差異的資料插入到後台的資料庫表中。顯然,對於這些記錄,使用者並不需要等待資料的插入完成。如在前台呼叫這個作業時,可以將這個作業放在後端執行。等到執行完畢後,再通知使用者即可。

在遇到這種情況時,就可以使用插入延遲的功能。當資料庫工程師啟用插入延遲功能時,伺服器會立刻返回,而不會在那邊等著資料插入完成。如果表中沒有被其他執行緒所呼叫的情況,那麼記錄會排隊等待被插入。使用這個插入延遲特性,還能夠帶來另外乙個好處。當多個作業同時往同乙個表中插入資料的時候,這些程序會被記錄在同乙個block中。這就好像將多個單獨的insert語句合併成一條insert語句來執行,其速度會快許多。

細節四:在插入大量資料之前,可以先將表鎖定

在資料庫庫中,某些表只有特定的使用者才使用。而且每次使用時可能會同時插入多條資料。如在erp系統中匯入期初資料時,就會碰到這種情況。從前台客戶端匯入產品資料時,通常情況下中間會有乙個過渡表。使用者可以通過這個過渡表來核對資料是否準確。如果沒有問題的話,再將其匯入到產品資訊表中。採取這種方式,使用者還可以查詢到有哪些記錄沒有被匯入到系統中。

由於期初資料的匯入,一般是有系統管理員來完成的。此時這張過渡表只有乙個使用者使用。為了提高資料插入的效率,資料庫工程師可以考慮,在插入之前先將表鎖定。這可以提高資料插入的效能。這主要是因為索引緩衝區只是在所有的插入語句完成之後才對磁碟進行一次性重新整理。也就是說,有多個插入語句就會有多少次索引緩衝區重新整理。為此在資料插入之前,將資料表進行鎖定,就可以大幅度的提高資料插入的效率。

細節五:插入資料之前先對資料進行排序

眾所周知,在對記錄進行排序時,需要耗費一定的系統資源。如果在插入資料時,就能夠考慮到排序問題,那麼在後續記錄查詢時,就可以避免重新排序所造成的二次開銷。故筆者建議,在可行的情況下,在對資料插入之前先對記錄根據一定的規則進行排序。

如在採購訂單行表中,同時插入多條語句(從物料申購單轉換為採購訂單)。在採購訂單行中插入多條記錄之前,可以根據使用者的使用習慣,如按照產品的編號進行排序。使用者在後續查詢時,就可以直接使用查詢的結果(預設情況下是根據記錄插入的先後順序來顯示結果的)。顯示時就不需要再進行一次排序作業,從而可以提高資料後續查詢的效率。

資料庫基礎知識

資料定義 定義基本表 create table 表名 列名 資料型別 列級完整性約束條件 列名 資料型別 列級完整性約束條件 表級完整性約束條件 後面用到的表 1 學生 表 student 由學號 sno 姓名 sname 性別 s 年齡 sage 所在系 sdept 5個屬性組成,可記為 stud...

資料庫 基礎知識

e r模型 實體 聯絡模型 entity relationship model,e r模型 實體是指現實中區別於其他物件的一種 物體 或一件 事情 例如一名學生,乙個專案等等。同乙個型別中所有的實體被叫做實體集,對應於資料庫的一張表,乙個實體則對應於一條記錄。不同的任務之間,就是通過聯絡關係整合到一...

資料庫基礎知識

一 1 ddl 資料庫定義語句,建立資料表 dml 資料庫操作語言 dcl 資料控制語言 dql 資料查詢語言 2 資料查詢,sql語句 看課堂作業 查詢結果是表。3 聚集函式的一般格式 會使用 distinct all 列名 4 檢視 從乙個或幾個基本表 或檢視 匯出的表,與基本表不同,是乙個虛表...