在一個(gè)項(xiàng)目實(shí)施初始,數(shù)據(jù)庫(kù)的設(shè)計(jì)非常重要,很多時(shí)候,我們只關(guān)心和考慮到眼前的功能,而忽略了后續(xù)的可維護(hù)性和可拓展性,以及還有一個(gè)在大數(shù)據(jù)時(shí)代會(huì)遇到的高并發(fā)問(wèn)題。
在設(shè)計(jì)表結(jié)構(gòu)時(shí)要注意以下幾個(gè)要點(diǎn):
1.數(shù)據(jù)行的長(zhǎng)度不要超過(guò)8020字節(jié),如果超過(guò)這個(gè)長(zhǎng)度的話在物理頁(yè)中這條數(shù)據(jù)會(huì)占用兩行從而造成存儲(chǔ)碎片,降低查詢效率。
2.能夠用數(shù)字類型的字段盡量選擇數(shù)字類型而不用字符串類型的(電話號(hào)碼),這會(huì)降低查詢和連接的性能,并會(huì)增加存儲(chǔ)開(kāi)銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接回逐個(gè)比較字符串中每一個(gè)字符,而對(duì)于數(shù)字型而言只需要比較一次就夠了。
3.對(duì)于不可變字符類型char和可變字符類型varchar 都是8000字節(jié),char查詢快,但是耗存儲(chǔ)空間,varchar查詢相對(duì)慢一些但是節(jié)省存儲(chǔ)空間。在設(shè)計(jì)字段的時(shí)候可以靈活選擇,例如用戶名、密碼等長(zhǎng)度變化不大的字段可以選擇CHAR,對(duì)于評(píng)論等長(zhǎng)度變化大的字段可以選擇VARCHAR。
4.字段的長(zhǎng)度在最大限度的滿足可能的需要的前提下,應(yīng)該盡可能的設(shè)得短一些,這樣可以提高查詢的效率,而且在建立索引的時(shí)候也可以減少資源的消耗。
查詢語(yǔ)句優(yōu)化要點(diǎn):
1.盡可能使用索引
2.查詢有先后順序,注意把快速條件或者索引查詢放在前面
3.應(yīng)盡量避免在 where 子句中使用 or 來(lái)連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:
select id from t where num=10 or num=20
可以這樣查詢:
select id from t where num=10
union all
select id from t where num=20
4.要避免在where中使用表達(dá)式,這樣將放棄索引,進(jìn)行全表查詢
聯(lián)系客服