關(guān)于MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)的幾點(diǎn)優(yōu)化措施
我們知道,一個(gè)好的數(shù)據(jù)庫(kù)設(shè)計(jì)方案對(duì)于數(shù)據(jù)庫(kù)的性能常常會(huì)起到事半功倍的效果。因此作為數(shù)據(jù)庫(kù)設(shè)計(jì)人員,我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),往往要考慮到一些措施來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化。本文我們就簡(jiǎn)單介紹一下MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)的一些優(yōu)化措施,希望能夠?qū)δ兴鶐椭?/p>
1、命名的技巧與規(guī)范
無(wú)論什么設(shè)計(jì),命名都應(yīng)該作為非常重要的事情來(lái)看待,表、序列、字段、索引的命名技巧可以歸結(jié)如下:
(1) 序列名字跟表字段名字相同
例如:insert into users(us_id)value(us_id.nextval)
SQLServer、DB2等數(shù)據(jù)庫(kù)中是沒(méi)有序列的含義的。
(2) 關(guān)聯(lián)表的名稱應(yīng)該是被關(guān)聯(lián)的表用“_”連接起來(lái)組成的
例如:我們已經(jīng)設(shè)計(jì)關(guān)聯(lián)是多對(duì)多的表authors和表books了,那么我們的關(guān)聯(lián)表便可以命名為authors_books.
(3) 關(guān)聯(lián)字段名稱必須相同,名稱以基礎(chǔ)表的字段名稱為準(zhǔn)
例如:authors表中有as_id、as_name字段。
(4) 字段定義的前兩位是表名的縮寫,第三位是下劃線
例如:us_id、us_name、bk_name、bk_time.
***,保證規(guī)范,序列名稱必須是唯一的,而且,一般的序列就是這個(gè)表的id字段。如果不加前綴,那么字段都叫做id就會(huì)違背惟一性原則。
第二,為了將來(lái)關(guān)聯(lián)查詢語(yǔ)句的書寫方便。
(5) 常用字段采用固定定義
例如:序列:id 是否刪除:delornot
(6) 索引的名字和表的名字相同
為了提高大數(shù)據(jù)量的表格的查詢速度,可以采用建立適當(dāng)?shù)乃饕绞?。如果一個(gè)表只有一個(gè)索引,建議索引的名字跟表相同,如果有多個(gè)索引,則為表名稱加下劃線加索引列名稱。
2、優(yōu)化設(shè)計(jì)的技巧
(1) 關(guān)聯(lián)字段類型盡可能定義為數(shù)字類型
例如:us_id, bk_id等類型都應(yīng)該設(shè)計(jì)成數(shù)字類型。
(2) 表的序列字段必須是數(shù)字類型
原因同上。
(3) 如果一個(gè)字段需要經(jīng)常更改,則采用以空間換時(shí)間的設(shè)計(jì)方法
最常見(jiàn)的例子是用戶積分登錄次數(shù)的累加,按照范式設(shè)計(jì),在users表中建立一個(gè)字段us_scores,以后需要在用戶積分改變時(shí)采用update的語(yǔ)句進(jìn)行修改。但是知道 update語(yǔ)句的執(zhí)行速度是很慢的,為了避免大量重復(fù)使用它,優(yōu)化的設(shè)計(jì)方案是建立us_scores表,存儲(chǔ)每次增加的積分,在查詢是采用SQL語(yǔ)句的sum方法來(lái)計(jì)算之。
(4) 若數(shù)據(jù)庫(kù)有移植的可能性,不使用存儲(chǔ)過(guò)程及觸發(fā)器
(5) 建立恰當(dāng)?shù)乃饕?/p>
索引的建立是加快數(shù)據(jù)庫(kù)查詢的基本技巧之一,通常的建議是,只有***的記錄的表格才應(yīng)該建立索引。
3、如何保證數(shù)據(jù)的安全性
最安全的設(shè)計(jì)方案是,Web數(shù)據(jù)庫(kù)和測(cè)試數(shù)據(jù)庫(kù)分離。Web數(shù)據(jù)庫(kù)權(quán)限只被管理員一個(gè)人掌握。
關(guān)于MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)的優(yōu)化措施就介紹這么多了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>
【編輯推薦】






