-
如何維護(hù)索引
如何選擇合適的列建立索引
1、出現(xiàn)在where從句 group by 從句 order by 從句中的列
2、可選擇性高的列要放到索引的前面
3、索引中不要包括太長的數(shù)據(jù)類型
注意事項(xiàng)
1、索引并不是越多越好,過多的索引不但會降低寫效率而且會降低讀的效率
2、定期維護(hù)索引碎片
3、在sql語句中不要使用強(qiáng)制索引關(guān)鍵字
如何維護(hù)表結(jié)構(gòu)
1、使用在線變更表結(jié)構(gòu)的工具
mysql5.6之后本身支持在線表結(jié)構(gòu)的變更
2、同時(shí)對數(shù)據(jù)字典進(jìn)行維護(hù)
3、控制表的寬度和大小
數(shù)據(jù)庫中適合的操作
1、批量操作VS逐條操作
2、禁止使用select * 這樣的查詢
3、控制使用用戶自定義函數(shù)
4、不要使用數(shù)據(jù)庫中的全文索引
表的垂直拆分
為了控制表的寬度可以進(jìn)行表的垂直拆分;
1、經(jīng)常一起查詢的列放在一起;
2、text,blob等大字段拆分出到附加表中
表的水平拆分
為了控制表的大小可以進(jìn)行表的水平拆分
hash key 取模 等分表
查看全部 -
反范式化
所謂反范式化就是為了性能和讀取效率的考慮而適當(dāng)?shù)膶Φ谌妒降囊筮M(jìn)行違反,而允許存在的少量的數(shù)據(jù)冗余
反范式化就是使用空間來換取時(shí)間;
為什么要反范式化
1、減少表的關(guān)聯(lián)數(shù)量
2、增加數(shù)據(jù)的讀取效率
3、反范式化一定要適度
查看全部 -
如何選擇主鍵
1、區(qū)分業(yè)務(wù)主鍵和數(shù)據(jù)庫主鍵
業(yè)務(wù)主鍵用于標(biāo)識業(yè)務(wù)數(shù)據(jù),進(jìn)行表與表之間的關(guān)聯(lián);
數(shù)據(jù)庫主鍵為了優(yōu)化數(shù)據(jù)存儲(Innodb會生成6個(gè)字節(jié)的隱含主鍵)
2、根據(jù)數(shù)據(jù)庫的類型,考慮主鍵是否要順序增長
有些數(shù)據(jù)庫是按主鍵的順序邏輯存儲的
3、主鍵的字段類型所占空間要盡可能的?。?/p>
對于使用聚集索引方式存儲的表,每個(gè)索引后都會附件主鍵信息;
避免使用外鍵約束
1、降低數(shù)據(jù)導(dǎo)入的效率
2、增加維護(hù)成本
3、雖然不建議使用外鍵約束,但是相關(guān)聯(lián)的列上一定要建立索引
避免使用觸發(fā)器
1、降低數(shù)據(jù)導(dǎo)入的效率
2、可能會出現(xiàn)意想不到的數(shù)據(jù)異常
3、使業(yè)務(wù)邏輯變的復(fù)雜
關(guān)于預(yù)留字段
1、無法準(zhǔn)確的知道預(yù)留字段的類型
2、無法準(zhǔn)確的知道預(yù)留字段所存儲的內(nèi)容
3、后期維護(hù)預(yù)留字段所要的成本,同增加一個(gè)字段所需要的成本是相同的
4、嚴(yán)禁使用預(yù)留字段
查看全部 -
表及字段的命名規(guī)則
1、可讀性原則
使用大寫和小寫的格式化的庫對象名字以獲取良好的可讀性;
使用CustAddress 而不是customeraddress來提高可讀性
2、表意性原則
對象的名字應(yīng)該能夠描述它所標(biāo)識的對象
如:對于表,表的名稱應(yīng)該能體現(xiàn)表中存儲的數(shù)據(jù)內(nèi)容;
對于存儲過程,存儲過程名稱應(yīng)該能夠體現(xiàn)存儲過程的功能;
3、長名原則
盡可能少使用或者不使用縮寫,適用于數(shù)據(jù)(DATABASE)名之外的任一對象;
字段類型的選擇原則
1、在數(shù)據(jù)進(jìn)行比較(查詢條件、join條件及排序)操作時(shí):同樣的數(shù)據(jù),字符處理往往比數(shù)字處理慢
2、在數(shù)據(jù)庫中,數(shù)據(jù)處理以頁為單位,列的長度越小,利于性能提升
char和varchar如何選擇
1、如果列中要存儲的數(shù)據(jù)長度差不多是一致的,則應(yīng)該考慮用char; 否則應(yīng)該考慮用varchar;
2、如果列中的最大數(shù)據(jù)長度小于50byte,則一般也考慮用char;
3、一般不宜定義大于50byte的char類型列;
decinal與float如何選擇
1、decimal用于存儲精確數(shù)據(jù),而flot只能用于存儲非精度數(shù)據(jù),故精確數(shù)據(jù)只能選擇用decimal類型;
2、由于flot的存儲空間開銷一般比decimal小,故非精確數(shù)據(jù)優(yōu)先選擇flot類型
時(shí)間類型如何存儲
1、使用int來存儲時(shí)間字段的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):字段長度比datetime小
缺點(diǎn):使用不方便,要進(jìn)行函數(shù)轉(zhuǎn)換
限制:只能存儲到2038-1-19 11:14:07
2、需要存儲的時(shí)間顆粒
年 月 日 時(shí) 分 秒 周
查看全部 -
表及字段的命名規(guī)則
1、可讀性原則
使用大寫和小寫的格式化的庫對象名字以獲取良好的可讀性;
使用CustAddress 而不是customeraddress來提高可讀性
2、表意性原則
對象的名字應(yīng)該能夠描述它所標(biāo)識的對象
如:對于表,表的名稱應(yīng)該能體現(xiàn)表中存儲的數(shù)據(jù)內(nèi)容;
對于存儲過程,存儲過程名稱應(yīng)該能夠體現(xiàn)存儲過程的功能;
3、長名原則
盡可能少使用或者不使用縮寫,適用于數(shù)據(jù)(DATABASE)名之外的任一對象;
字段類型的選擇原則
1、當(dāng)一個(gè)列可以選擇多種數(shù)據(jù)類型時(shí),應(yīng)該優(yōu)先考慮數(shù)字類型,其實(shí)是日期或二進(jìn)制類型,最后是字符串類型。
2、對相同級別的數(shù)據(jù)類型,應(yīng)該優(yōu)先選擇占用空間小的數(shù)據(jù)類型
3、在數(shù)據(jù)庫進(jìn)行比較(查詢條件、JOIN條件及排序)操作時(shí):
同樣的數(shù)據(jù),字符處理往往比數(shù)字處理慢;
4、在數(shù)據(jù)庫中,數(shù)據(jù)處理以頁為單位,列的長度越小,利于性能提升;
查看全部 -
Boyce.Codd范式(BCNF)
定義:在第三范式的基礎(chǔ)之上,數(shù)據(jù)庫表中如果不存在任何字段對任一候選關(guān)鍵字段的傳遞函數(shù)依賴則附合BC范式;
也就是說如果是復(fù)合關(guān)鍵字,則復(fù)合關(guān)鍵字之間也不能存在函數(shù)依賴關(guān)系;
查看全部 -
第二范式(2NF)
存在的問題:
1、插入異常
2、刪除異常
3、更新異常
4、數(shù)據(jù)冗余
第三范式(3NF)
定義: 第三范式是在第二范式的基礎(chǔ)之前定義的,如果數(shù)據(jù)表中不存在非關(guān)鍵字段,對任意候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式;
(商品名稱)->(分類)-> (分類描述)
也就是說存在非關(guān)鍵字段 '分類描述'對關(guān)鍵字段'商品名稱'的傳遞函數(shù)依賴;
存在問題:
(分類、分類描述)對于每個(gè)商品都會進(jìn)行記錄,所以存在著數(shù)據(jù)冗余。同時(shí)也還存在數(shù)據(jù)的插入,更新及刪除異常
查看全部 -
第一范式(1NF)
定義:數(shù)據(jù)庫表中所有字段都是單一屬性,不可再分的;
第一范式要求數(shù)據(jù)庫的表都是二維表
第二范式(2NF)
定義:數(shù)據(jù)庫的表中不存在非關(guān)鍵字段對仁義候選關(guān)鍵字段的部分函數(shù)依賴;
查看全部 -
數(shù)據(jù)庫操作異常
查看全部 -
數(shù)據(jù)庫建立的1步驟
查看全部 -
表的水平拆分
查看全部 -
表的垂直拆分
查看全部 -
字段類型選擇原則
查看全部 -
字段類型的定義
查看全部 -
MySQL常用存儲引擎
查看全部
舉報(bào)