MySql使用中的注意點(一),MySql使用

來源:互聯網
上載者:User

MySql使用中的注意點(一),MySql使用

這篇文章主要針對以前從事企業級應用開發的同學,因為企業級的應用,特別是金融企業通常選用Oracle或者DB2作為資料庫。 

與上述要花費大價錢的資料庫軟體相比,免費的MySql還是有一些局限性,以及一些MySql自身的特點要留心、注意。 

1.在建立外鍵時,MySql僅支援數字類型的外鍵。 
這點真的比較噁心,因為表的主鍵設計既可以有物理主鍵,同時也可以有邏輯主鍵。而邏輯主鍵通常並非僅是數字,可能包含業務說明的英文字母,那這樣的邏輯主鍵是無法被設定為外鍵的。 
但是如果選用物理主鍵作為外鍵,那麼在做資料移轉時,特別是將測試環境的資料匯入到生產環境中時,必須特別留心要保持資料之間關聯關係。 
那麼要麼把測試資料庫中的主鍵值一起帶入到生產資料庫中,要麼手動修改資料間關聯。後者容易照成錯誤,而前者會破壞資料庫主鍵連續的物理特性, 
更壞的情況是,測試資料庫中的主鍵在生產資料庫中已經存在,而不得不使用再手動修改資料間關聯的辦法。 
所以現在我們的資料庫沒有建立外部索引鍵關聯,雖然這是一柄雙刃劍,但是多少會破壞資料庫的完整性設計。 

2.同一張表內設定預設目前時間的Timestamp類型的欄位只能有一個。 
例如,通常我們在建立一張表時,即有update_time,也有create_time。我們可能希望這兩個欄位的預設值都是目前時間,這樣在業務程式中可以簡化一些代碼處理。 
但是不幸的是,同一張表中只能有一個欄位被DEFAULT CURRENT_TIMESTAMP修飾。 

3.MySql的Timestamp類型的精度僅到秒。 
這點也沒什麼好說的,如果業務需求一定要精確到毫秒,那麼就儲存long型的數字吧。 

4.建立視圖的where條件不能包含子查詢。 
例如:create view invalidView select * from A a where a.xxx = (select b.xxx from B b where ...) 
即使上述語句去除前面create view invalidView部分可以正常運行,但是建立視圖時會被禁止。 
一種解決方案是將子查詢變為表串連,另外一種方法是將子查詢的邏輯提到欄位的部分,即select和from中間。 

5.沒有對子查詢進行演算法最佳化。 
例如:select * from A a where a.xxx = (select b.xxx from B b where ...) 
上述語句當在Oracle中之間,後面的子查詢只會被執行一次,但是在MySql中會被執行n次,n為A表中的資料量。 
所以應該禁止子查詢的使用。 
解決辦法首先是應該將子查詢變為表串連的查詢,如果不行,那麼請將上述查詢分拆為兩次查詢。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.