MySQL优化Tip

 

1.避免 Select * Selcet 中每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃 的字段的大小来判断。应避免使用 Select *。

2.表关联顺序 Oracle 的解析器按照从右到左的顺序处理 from 子句中的表名,from 子句中写在最后的表(基 础表 driving table)将被最先处理,在 from 子句中包含多个表的情况下,你必须选择记录条数 最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table) 作为基础表, 交叉表是指那个被其他表所引用的表。

3.WHERE 子句中的顺序 Oracle 采用自下而上的顺序解析 Where 子句,根据这个原理,表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量记录的条件写在 Where 子句的末尾。

4.避免全表扫描 Where 中少用 NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE,它们会引起全表扫描。

5.用 Where 子句替代 having 子句 避免使用 having 子句,having 只会在检索出所有记录之后才对结果集进行过滤。

6.exists 代替 in Oracle 中 In 子查询返回的结果不能超过 1000 条,使用 exists 为替代方案。

7. 优先使用 UNION ALL,避免使用 UNION UNION 因为会将各查询子集的记录做比较,故比起 UNION ALL ,通常速度都会慢上许多。
133 / 166

一般来说,如果使用 UNION ALL 能满足要求的话,务必使用 UNION ALL。还有一种情况,如 果业务上能够确保不会出现重复记录。

8. 在 where 语句或者 order by 语句中避免对索引字段进行计算操作 当在索引列上进行操作之后,索引将会失效。正确做法应该是将值计算好再传入进来。

9. 避免在索引列上做如下操作: ◆避免在索引字段上使用<>,!= ◆避免在索引列上使用 IS NULL 和 IS NOT NULL ◆避免在索引列上出现数据类型转换(比如某字段是 String 类型,参数传入时是 int 类型) 当在索引列上使用如上操作时,索引将会失效,造成全表扫描。 10. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将 可能无法正确使用索引

11. 尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间, 其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

12. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过 1 万行,那么就应 该考虑改写

13.尽量避免大事务操作,提高系统并发能力。

14.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

15.2000条以内的记录不建议做索引

16.最佳左前缀原则,联合索引的B+Tree是按照第一个关键字进行索引排列的。

 

你可能感兴趣的:(MySQL优化Tip)