資料庫使用注意事項

2021-10-24 08:32:41 字數 4683 閱讀 4972

1.

建表時表名要規範,前面加上**標誌的字首t_(類似的,檢視字首v_,儲存過程字首p_,函式字首f_)各個單詞用_分割,形如:t_house_log,字段採用小駝峰命名法,形如:creatername,欄位要選擇合適的型別,並指定恰當的長度,不可太長也不可太短(欄位為字串時一定要指定長度,不要用預設的varchar(255)),所有欄位皆不能為空並加好備註,設定合適的預設值,對常用

條件字段

加上索引以提高查詢速度。強制加上欄位createtime,記錄資料插入時的時間。

2.查詢時不允許使用select * from語句,必須指定需要的字段,查詢數量也盡量加以限制,以免在查詢大表時導致伺服器卡死。

另外,盡量不要在條件語句中做計算,會導致不走索引並掃瞄全表,形如:

selectcontidfrom

protocolwhere

left

(dealdate,7

)='2020-09'

可以替換成

selectcontidfrom

protocolwheredealdatebetween'2020-09-01'and'2020-09-30'3.

聯表查詢盡量使用join,而不是使用「,」,如:

select

house.houseid

,housetsgjidfrom

house,housetsgjwherehouse.houseid

=housetsgj.houseid

可替換為

select

house.houseid

,housetsgjidfrom

houseinner join

housetsgjon

house.houseid

=housetsgj.houseid

,表的別名要有含義,不要起a,b,c這樣的別名。聯表時小表在前,大表在後,具有過濾性的過濾條件在後,普通的過濾條件在前(單錶查詢時也試用),聯表個數盡量不要超過三個,對於多處使用的複雜查詢,可做成檢視。使用like 時多數可以用charat代替。

4.在進行資料的修改刪除時,應先寫好查詢語句,確認好資料後在查詢語句的基礎上進行修改,不可重新寫語句,以免條件缺失導致事故的發生。

5.盡量避免使用迴圈(游標),資料庫的速度來自於它對集合進行操作,迴圈不是它擅長的事情,一般情況下可以用臨時表或表變數加以過渡,以使迴圈處理變為集合處理。如果必須使用游標,盡量不巢狀,以免導致不可知問題。

6.方法和儲存過程不可太長,如果太長,需進行拆分,直到主體**邏輯清晰順暢為止,乙個方法或儲存過程只做一件事情,不可為圖方便把所有邏輯堆到乙個裡面。方法中不進行資料的增刪改操作。**邏輯要緊湊,變數定義盡量靠近使用處,並標明含義和用途,步驟之間用空行和注釋分離。if-else巢狀層數不能超過三層,否則**可讀性迅速降低。編寫完成之後必須格式化**再進行儲存。7.

慎用觸發器,慎用觸發器,慎用觸發器,在對外關聯比較多的表上禁止使用觸發器,觸發器中不要進行複雜的邏輯操作。 8.

在邏輯設計中能在伺服器進行的計算盡量不要在客戶端計算,如果伺服器資源短缺,可適當把計算放到客戶端(客戶端的情況多種多樣,一旦對它要求過高,會導致有些客戶端不可用)。 9.

靈活運用系統提供的工具簡化**,如生成**編號的**:

select

@housecount =

max(

cast

(right

(houseno, 6

)as int

)) +

1from

housewhere

left

(houseno, 4

) = @housetop

if

(@housecount =null

)or

(@housecount =''

)or

(@housecountis null

)select

@housecount ='000001'

if

len(@housecount) =

1set

@houseno = @housetop +'00000'

+ cast

(@housecountas varchar(1

))else

if

len(@housecount) =

2set

@houseno = @housetop +'0000'

+ cast

(@housecountas varchar(2

))    

else

if

len(@housecount) =

3set

@houseno = @housetop +'000'

+ cast

(@housecountas varchar(3

))else

if

len(@housecount) =

4set

@houseno = @housetop +'00'

+ cast

(@housecountas varchar(4

))  

else

if

len(@housecount) =

5set

@houseno = @housetop +'0'

+ cast

(@housecountas varchar(5

))   

else

set

@houseno = @housetop +

cast

(@housecountas varchar(6

))

可改寫為

select

@housecount =

max(

cast

(right

(houseno, 6

)as int

)) +

1from

housewhere

left

(houseno, 4

) = @housetop

set

@houseno = @housetop +

right

('00000'

+cast

(isnull

(@housecount,

1)as varchar),6

) 核心思想:所有行為都是有意識的。

資料庫注意事項

主要就是6點 1.必須考慮業務唯一性並建復合唯一索引 2.所有字段盡量設定為not null 3.區分度低的字段不要建索引 4.邏輯外來鍵要建索引 5.用uuiddelete id varchar 32 not null default 做偽刪除 6.建議確定無負數的字段設定unsigned 建表時...

資料庫注意事項

索引會佔據瓷盤空間,資料越大索引佔據空間越大 mysql表中除了聚集索引外其他索引都是輔助索引 secondary index,也稱為非聚集索引 與聚集索引的區別是 輔助索引的葉子節點不包含行記錄的全部資料。聚焦索引 更適合between and和order by操作,每個表只能建立乙個聚焦索引 如...

資料庫維護注意事項

壓縮日誌及資料庫檔案大小 特別注意 請按步驟進行,未進行前面的步驟,請不要做後面的步驟 否則可能損壞你的資料庫.一般不建議做第4,6兩步 第4步不安全,有可能損壞資料庫或丟失資料 第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.1.清空日誌 dump transaction ...