mysql数据库优化的一些优化建议

1、mysql数据库索引的一些优化建议,数据库使用的InnoDB引擎非MsISAM,而且索引类型是Btree(mysql默认)

    一、独立的索引列。索引不能是表达式的一部分,也就是说索引列不能参与任何计算和函数方法(冲当参数)等。mysql

    二、不要肆意使用索引。并非说为where条件以后的全部查询列都加上索引就必定会提高查询性能。sql

    三、当where后面出现两个以上索引列时,应该考虑使用多列索引。数据库

    四、注意索引列的顺序(针对多列索引)。将选择性最高的放在前面,好比有两个索引,一个是专业一个班级,那显然筛选专业比筛选班级更快,由于专业数据比班级要少不少。缓存

    未完待续……网络

2、数据库高性能,包含不少方面,表结构,索引等等都不是所有,还须要查询优化

    一、避免查询大量的数据,大量的数据很是消耗内存,而且避免使用*,若是列不少,会增长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左右两边的列都有索引。

    八、查询时可使用视图,增删改时使用原表,有些版本也支持直接对视图进行增删改,这样作能够将表和应用解耦,也更加灵活。

    未完待续……

相关文章
相关标签/搜索