MySql – 优化性能
1. 建表
1. 选择最合适的字段属性及长度;--> 数据库中的表越小,在它上面执行的查询也就越快;
2. 可非空字段尽量设置为NOT NULL; --> 执行查询的时候,数据库不用去比较NULL值;
3. 设置索引(用于join,where和orderby的字段) --> 可以令数据库服务器比没有索引快得多的速度检索特定的行;【尽量不要对数据库中某个含有大量重复值的字段建立索引】
4. 数字型优先字符型;--> 字符串会逐个比较,数字仅比较一次;
5. varchar/nvarchar 代替 char/nchar; --> 变长字段存储空间小,查询效率高(char类型 NULL 也会占空间);
2. 查询
1. 减少、避免使用子查询; --> 可用 JOIN 关联;
2. 用 IN 来替换 OR;
3. LIKE 双百分号无法使用到索引(避免开头模糊查询); LIKE '%var%' --> LIKE 'var%'
4. 避免数据类型不一致;
5. 批量 INSERT 插入; --> 可批量操作不分开操作;
6. 避免进行null值的判断(WHERE att IS NULL) -> 可以给字段添加默认值0,对0值进行判断;
7. 避免 where 条件中等号的左侧进行表达式、函数操作; (WHERE att/10 = 9) --> (WHERE att = 9*10)
8. 避免使用where 1=1的条件; --> 没 where 条件就去掉 where;
9. 多表关联查询时,小表在前,大表在后;
6. 减少不必要的排序以及全表查询;
##导致引擎放弃索引进行全表扫描的操作
1. 开头模糊查询: liek '%var%';
2. in 和 not in;
3. 进行null值的判断;
4. where 条件中等号的左侧进行表达式、函数操作;
5. 使用where 1=1的条件;