數據庫我的經驗

1.儘可能不在數據庫中作運算
2.控制單表數據量
3.控制表身段苗條(字段數上限控制在20~50之間)
4.平衡範式和冗餘
5.拒絕3B(大sql 大事務 大批量)
6.用好數值字段類型
7.儘量將字符轉換爲數字
8.避免使用NULL字段
9.少用並拆分TEXT/BLOB
10.不在數據庫中存圖片
11.謹慎合理添加索引
12.不在索引列作運算
13.自增列或者全局ID作主鍵
14.儘可能不用外鍵
15.SQL語句儘量簡單
16.保持事務(鏈接)短小 事務/鏈接使用原則:即開即用,用完即關
17.儘量避免使用SP/TRIG/FUNC(存儲過程/觸發器/函數)
18.儘可能不用SELECT * ,叧取須要數據列
19.改寫OR爲IN()
20.改寫OR爲UNION
21.避免負向查詢和% 前綴模糊查詢
避免負向查詢
NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等 
避免 % 前綴模糊查詢
MySQL> select * from post WHERE title like ‘北京%' ; (0.01 sec)
MySQL> select * from post WHERE title like ' % 北京%' ; (3.27 sec)
22.COUNT(*)的幾個例子
COUNT(*)=count(1)
COUNT(0)=count(1)
COUNT(1)=count(100 )
COUNT(*)!=count(col)
23.減小COUNT(*)
24.LIMIT高效分頁
示例:
MySQL> select sql_no_cache * from post limit 10,10;
MySQL> select sql_no_cache * from post limit 20000,10;
MySQL> select sql_no_cache * from post limit 80000,10;
MySQL> select sql_no_cache id from post limit 80000,10;
MySQL> select sql_no_cache * from post WHERE id>=323423 limit 10;
MySQL> select * from post WHERE id >= ( select sql_no_cache id from post limit 80000,1 ) limit 10 ;
25.用UNION ALL 而非 UNION
26.分解聯接保證高併發
27.GROUP BY 去除排序
28.同數據類型的列值比較 原則:數字對數字,字符對字符
29.Load data 導數據
30.儘可能不用 INSERT ... SELECT
31.打散大批量更新 大批量更新凌晨操做,避開高峯
32.隔離線上線下
原則:線上連線上,線下連線下
實時數據用real庫
模擬環境用sim庫
測試用qa庫
開發用dev庫
33.禁止未經DBA確認的子查詢
34.永遠不在程序端顯式加鎖
35.統一字符集爲UTF8
36.統一命名規範
37.注意避免用保留字命名

 
相關文章
相關標籤/搜索