一、独立的索引列。索引不能是表达式的一部分,也就是说索引列不能参与任何计算和函数方法(冲当参数)等。mysql
二、不要肆意使用索引。并非说为where条件以后的全部查询列都加上索引就必定会提高查询性能。sql
三、当where后面出现两个以上索引列时,应该考虑使用多列索引。数据库
四、注意索引列的顺序(针对多列索引)。将选择性最高的放在前面,好比有两个索引,一个是专业一个班级,那显然筛选专业比筛选班级更快,由于专业数据比班级要少不少。缓存
未完待续……网络
一、避免查询大量的数据,大量的数据很是消耗内存,而且避免使用*,若是列不少,会增长mysql服务层的负担。
函数
二、对索引字段的数据筛选是在数据库引擎层进行,很是高效,对非索引的筛选是在数据库服务层先筛选再去引擎获取数据,因此where条件尽可能使用索引并且避免一些复杂的条件,好比函数。
性能
三、切分查询,好比要查询全部的学生,可使用limit分次查询,从而避免单次查询阻塞网络和磁盘io等,同理也是用其余语句。
优化
四、分解关联查询,将联表、子查询分解成独立的单表查询不只能够提升缓存命中率,还能够改善查询性能,减小锁竞争,在应用层对数据进行关联性能比在数据库进行关联效率要高不少。
spa
五、排序是一个成本很高的操做,应该尽可能是排序的字段是索引字段
排序
六、mysql对子查询支持并非很好,在mysql中应该尽可能使用子查询。当无可奈何的时候,好比where id in ( select * from table limit 1)的时候,能够改写成这样where id exists( select * from table limit 1),由于mysql对exists作了改进
七、当进行关联的时候确保on左右两边的列都有索引。
八、查询时可使用视图,增删改时使用原表,有些版本也支持直接对视图进行增删改,这样作能够将表和应用解耦,也更加灵活。
未完待续……