mysql优化
1、查询语句优化
1、在 WHERE 及 ORDER BY 涉及的列上建立索引
2、避免在 WHERE 子句中对字段进行 NULL 值判断
3、应尽量避免在 WHERE 子句中使用 != 或 <> 操作符
4、避免在 WHERE 子句中使用 OR 来连接条件
5、IN 和 NOT IN 也要慎用,用BETWEEN代替,用 EXISTS 代替 IN
6、避免模糊查询"%value%"、"%value"会导致全表扫描
7、WHERE 子句中使用参数,也会导致全表扫描
8、避免WHERE 子句中对字段进行表达式、函数操作
9、避免超过 5 个以上的表连接(JOIN)
10、尽量使用 “>=”,不要使用 “>”
2、索引优化
1、索引的创建要与应用结合考虑,表最多不要超过 6 个索引
2、避免对大表查询时进行 table scan,必要时考虑新建索引
3、尽可能的使用索引字段作为查询条件,尤其是聚簇索引,通过 index index_name 来强制指定索引
4、要注意索引的维护,周期性重建索引,重新编译存储过程
5、表的主键、外键必须有索引;
6、数据量超过 300 的表应该有索引;
7、经常与其他表进行连接的表,在连接字段上应该建立索引;
8、经常出现在 WHERE 子句中的字段,特别是大表的字段,应该建立索引;
9、索引应该建在选择性高的字段上;
10、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
11、复合索引的建立需要进行仔细分析,尽量考虑用单字段索引代替;
12、正确选择复合索引中的主列字段,一般是选择性较好的字段;
13、复合索引的几个字段是否经常同时以 AND 方式出现在 WHERE 子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
14、如果复合索引中包含的字段经常单独出现在 WHERE 子句中,则分解为多个单字段索引;
15、如果复合索引所包含的字段超过 3 个,那么仔细考虑其必要性,考虑减少复合的字段;
16、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
17、频繁进行数据操作的表,不要建立太多的索引;
18、删除无用的索引,避免对执行计划造成负面影响;
19、表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。
20、尽量不要对数据库中某个含有大量重复的值的字段建立索引