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.注意避免用保留字命名