数据库个人经验
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.注意避免用保留字命名