mysql 优化

1.表设计优化

1、选取最适用的字段属性

在创建表的时候,将表中字段的宽度设得尽可能小。不仅可以减少存储开销。还可以加快查询速度。

2、使用索引

优点:
1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
2)可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4)在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

不足:索引需要占物理空间,而且当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低效率。

一般来说,应该在这些列 上创建索引,例如:

1)在经常需要搜索的列上,可以加快搜索的速度;
2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
3)在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度;
4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
5)在经常需要排序的列上创 建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
6)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

2.查询语句优化

1.应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。	
2.应尽量避免在 where 子句中对字段进行 null 值判断
3.应尽量避免在 where 子句中使用!=或<>操作符
4.应尽量避免在 where 子句中使用 or 来连接条件
5.in 和 not in 也要慎用,如对于连续的数值,能用 between 就不要用 in 了,或者用用 exists 代替 in
6.合理使用like模糊查询 ,%yue%  一定会是全表扫描 
7.应尽量避免在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算		
10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。	
11.不要写一些没有意义的查询,入 where 1=1		
17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。	
18.避免频繁创建和删除临时表,以减少系统表资源的消耗。
20.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
21.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
原文地址:https://www.cnblogs.com/mcahkf/p/9036346.html