1、对查询进行优化,要尽量避免使用全表扫描,首先考虑在进行条件判断的字段上创建索引,进行索引扫描 2、尽量避免在WHERE子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描 3、尽量避免在where子句中使用!=或者<>操作符,否则引擎放弃使用索引而进行全表扫描 4、尽量避免在where子句中使用OR来进行连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,而是使用union all实现 5、尽量避免使用NOT IN作为条件判断,否则也会导致引擎全表扫描,很多时候用NOT EXISTS 代替NOT IN是一个不好的选择 6、模糊查询使用‘%’也将导致全表扫描(mysql) 7、尽量避免在where子句 中对字段进行表达式计算操作,这将导致引擎放弃使用索引而进行全表扫描 8、使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引(最左原则),否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。所谓的复合索引就是创建一个索引的时候作用在多个字段上 9、update语句,如果只更改1、2个字段,不要update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志 10、对于多张大数据量的表连接(多表连接),可以考虑使用程序去实现,不要做连接查询,就是尽量避开多表查询(多表查询会出现笛卡尔积) 11、索引并不是越多越好,索引固然可以提高相应select效率,但同时也降低了insert及update的效率,因为insert或者update时有可能会重建索引,创建索引需视情况而定 12、尽量使用数字型字段,若只含数值信息的字段尽量不要涉及为字符型,这会降低查询和连接的性能,并会增加存储开销,这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了 13、任何地方都不要使用select * from tablename,用具体的字段列表代替*,不要返回用不到的任何字段 14、学会使用慢查询来进行数据库的优化,可以通过spring+Druid来实现,可以观察具体那些sql语句执行最慢,从而可以对查询进行优化